2011-08-16 10 views
11

C'è un modo in C per dividere una stringa (usando strtok o in un altro modo) in cui il delimitatore ha più di un carattere di lunghezza? Sto cercando qualcosa di simile:C'è un modo per dividere una stringa su più caratteri in C?

char a[14] = "Hello,World!"; 
char *b[2]; 
b[0] = strtok(a, ", "); 
b[1] = strtok(NULL, ", "); 

voglio questo per non dividere la stringa, perché non c'è spazio tra la virgola e il W. C'è un modo per farlo?

risposta

8

È possibile chiamare ripetutamente il numero substr per trovare le occorrenze della stringa di confine e suddividerle lungo i risultati. Dopo aver trovato un risultato, fai avanzare il puntatore per la lunghezza della sottostringa e cerca di nuovo.

+0

È C o C++? – Jason

+2

È C se si include '', ed è C++ se si dice 'std :: substr' e si include' ', sebbene in C++ non si utilizzino puntatori di caratteri nudi per le stringhe. –

+0

@Kerrek: dipende da cosa stai facendo. Le coppie di puntatori char nette funzionano molto bene per l'analisi di file di testo mappati in memoria senza bisogno di copie o allocazioni di dati. Li avvolgi in una bella lezione, naturalmente. –

4

È possibile utilizzare char * strstr(const char *haystack, const char *needle) per individuare la stringa del delimitatore all'interno della stringa.

char a[14] = "Hello,World!"; 
char b[2] = ", "; 
char *start = a; 
char *delim; 
do { 
    delim = strstr(start, b); 
    // string between start and delim (or end of string if delim is NULL). 
    start = delim + 2; // Use lengthof your b string. 
} while (delim); 
+0

Questo non ti darà nulla prima del primo delimitatore (incluso non dare assolutamente nulla nel caso di "Hello, World!" –

+0

Grazie Brian. Risolto. –

+1

-1 se strstr restituisce NULL incrementerai NULL; 'char * b [2] = "," 'è un errore, corretto è' char b [] = ","; 'o' const char * b = ","; ' – user411313

1

Qualcosa di simile forse? Non garantisce che questo compili. ;)

char* strstrtok(char *haystack, char *needle) { 
    static char *remaining = null; 
    char *working; 

    if(haystack) 
     working = haystack; 
    else if(remaining) 
     working = remaining; 
    else 
     return NULL; 

    char *result = working; 
    if(result = strstr(working, needle)) 
     remaining = working + strlen(needle) + 1; 

    return result; 
} 
+0

è solo il codice C99 – user411313

Problemi correlati