2012-04-27 7 views

risposta

34

Che ne dite:

char *dot = strrchr(str, '.'); 
if (dot && !strcmp(dot, ".csv")) 
    /* ... */ 
+0

'str' essendo la stringa –

+2

questo, però, non funziona per i casi in cui la stringa contiene più di periodo (non probabile, ma sicuramente possibile) – kappamaki

+16

@kappamaki: Questo funziona perché' strrchr' trova il più a destra punto. –

25
if(strlen(str) > 4 && !strcmp(str + strlen(str) - 4, ".csv")) 
+0

Puri awesomeness :-) – cnicutar

+1

Quindi, '" .csv "' non termina con '" .csv "'? –

+2

Di solito un file '.whatever' è considerato avere il nome' .whatever' e nessuna estensione. Quindi per i suoi casi d'uso questo ha più senso. IMO. – ThiefMaster

4

Il più semplice (e più in generale) sotto forma di codice di ThiefMaster sarebbe:

int string_ends_with(const char * str, const char * suffix) 
{ 
    int str_len = strlen(str); 
    int suffix_len = strlen(suffix); 

    return 
    (str_len >= suffix_len) && 
    (0 == strcmp(str + (str_len-suffix_len), suffix)); 
} 
Problemi correlati