2012-04-27 11 views

Odpowiedz

34

Jak o:

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

'str' jest ciąg –

+2

To jednak nie zadziała w przypadku gdy ciąg zawiera więcej niż okres (prawdopodobnie nie, ale na pewno jest to możliwe) – kappamaki

+16

@kappamaki: To działa, ponieważ' strrchr' znajdzie prawym najbardziej kropka. –

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

Czysta wspaniałość :-) – cnicutar

+1

A więc ".csv" 'nie kończy się na' ".csv" '? –

+2

Zwykle plik '.whatever' jest uznawany za nazwę' .whatever' i bez rozszerzenia. Więc dla jego przypadków użycia ma to bardziej sensowny IMO. – ThiefMaster

4

Najprostszym (i najbardziej ogólnie) forma kodu ThiefMaster byłoby:

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)); 
} 
Powiązane problemy