Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    110

    [C] caratteri in una stringa

    Salve a tutti,
    ho un puntatore ad una stringa di caratteri (AbBcCDhEFCCBcH)

    e un array di puntatori a char
    char *stringToSearch[] = {"Ab","Bc","C"};

    come si fa una funzione che determini (e restituisca) quante volte si trovano i vari caratteri nella stringa.

    per cui in questo caso troverei
    Ab una volta
    Bc due volte
    C tre volte

    qualcuno sa suggerirmi o darmi un esempio?
    tks

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254

    Re: [C] caratteri in una stringa

    Originariamente inviato da earp_
    come si fa una funzione che determini (e restituisca) quante volte si trovano i vari caratteri nella stringa.
    codice:
    #include <stdio.h>
    #include <string.h>
    
    void countStrings (char *str, char *strings[], int *occurrences, int count)
    {
        int i, len;
        char *p;
    
        memset (occurrences, 0, count * sizeof (int));
    
        for (i = 0; i < count; i++)
        {
            p = str;
            len = strlen (strings[i]);
    
            while ((p = strstr (p, strings[i])) != NULL)
            {
                occurrences[i]++;
                p += len;
            }
        }
    }
    
    int main (void)
    {
        int i;
        char *text = "prova di ricerca di stringhe dentro una stringa";
        char *strings[] = { "st", "tr", "di" };
        int occurrences[3];
    
        countStrings (text, strings, occurrences, 3);
    
        for (i = 0; i < 3; i++)
            printf ("\"%s\" %d\n", strings[i], occurrences[i]);
    
        return 0;
    }
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    110
    fenomenale
    ora me la studio un pò.
    tks

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    110
    però aspetta.
    Sei d'accordo che se
    char *strings[]={"st","tr","di","t","i"}
    una volta trovata la coppia "st" = 1,
    per la singola lettera "t" nella frase "dentro una stringa"
    avrò "dent ro una st ringa"
    quindi t=2
    e io non voglio questo perchè ho già contato "st" e questa t non la voglio più contare.

    quindi pensavo di mettere le coppie di lettere nelle prime posizione di *strings[]
    e di eliminare dalla *text le coppie trovate in questo modo vado ad evitare di conteggiare una lettera singola, presente in una coppia di lettere, altre volte.
    Può avere senso?

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Originariamente inviato da earp_
    ... e io non voglio questo perchè ho già contato "st" e questa t non la voglio più contare.
    ...
    E questo quando lo avevi detto?

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    110
    e qui ci rifacciamo alle volte che mi si diceva....fai la domanda completa e subito.
    ok mea culpa perdincirindella, prometto che cercherò di essere + chiaro le prossime volte

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Originariamente inviato da earp_
    una volta trovata la coppia "st" = 1,
    per la singola lettera "t" nella frase "dentro una stringa"
    avrò "dent ro una st ringa"
    quindi t=2
    e io non voglio questo perchè ho già contato "st" e questa t non la voglio più contare.
    Beh, dipende dalle specifiche che vuoi implementare. Se cambi le specifiche ... dillo!

    Originariamente inviato da earp_
    quindi pensavo di mettere le coppie di lettere nelle prime posizione di *strings[]
    Le soluzioni sono diverse. O gestisci la cosa "a monte" (prima di chiamare la funzione ti assicuri che non ci siano stringhe da cercare che non vorresti) o gestisci la cosa nella funzione (una idea potrebbe essere questa: per ogni stringa vai a verificare se è una sotto-stringa nelle stringhe precedenti).

    Originariamente inviato da earp_
    e di eliminare dalla *text le coppie trovate
    Se la stringa puntata da 'str' nella funzione fosse scrivibile, potrebbe anche andare, tecnicamente parlando. Nel mio esempio 'text' punta ad una stringa "literal", quindi non ci devi andare a scrivere sopra.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    110
    quindi non ci devi andare a scrivere sopra.
    chiaro però posso sempre fare una funzione che mi aggiorni il contenuto a cui punta *text
    e quindi non ci dovrebbero essere problemi.

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Originariamente inviato da earp_
    chiaro però posso sempre fare una funzione che mi aggiorni il contenuto a cui punta *text
    e quindi non ci dovrebbero essere problemi.
    Non ha molto senso .... tanto vale duplicare la stringa per il solo uso dentro la funzione. Cioè nella funzione allochi memoria, copi la stringa e ci fai quello che vuoi. Alla fine un bel free.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    110
    ok
    tks

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.