如何将字符串的最后n个字符与C中的另一个字符串进行比较

想象一下,我有两个字符串,其中一个是“/sdcard/test.avi”之类的url,另一个是“/sdcard/test.mkv”。 我想写一个if语句,查看字符串的最后四个字符是否为“.avi”或不是C.我怎么能这样做? 使用strcmp或者是什么以及如何使用?

如果你有一个指向char的指针数组str ,那么这个:

 int len = strlen(str); const char *last_four = &str[len-4]; 

会给你一个指向字符串最后四个字符的指针。 然后,您可以使用strcmp() 。 请注意,您需要处理(len < 4) ,在这种情况下,上述情况无效。

只执行if ( strcmp(str1+strlen(str1)-4, str2+strlen(str2)-4) == 0 ) {}

确保两个字符串长度至少为4个字符。

在纯C中,您只能求助于手动比较:

 int endswith(const char* withwhat, const char* what) { int l1 = strlen(withwhat); int l2 = strlen(what); if (l1 > l2) return 0; return strcmp(withwhat, what + (l2 - l1)) == 0; } 
 #include  #include  int main(void) { DIR *dir; struct dirent *ent; char files[100][500]; int i = 0; memset(files, 0, 100*500); dir = opendir ("/sdcard/"); if (dir != NULL) { /* Print all the files and directories within directory */ while ((ent = readdir (dir)) != NULL) { strcpy(files[i], ent->d_name); if(strstr(files[i], ".avi") != NULL) { printf("\n files[%d] : %s is valid app file\n", i, files[i]); i++; } } closedir (dir); } return 0; } 

这个怎么样…

 if (!strcmp(strrchr(str, '\0') - 4, ".avi")){ //The String ends with ".avi" } 

char *strrchr(const char *str, int c) – 返回指向字符串中找到的最后一个匹配char的指针,如果这样指定,则包括NULL char。 在这种情况下,我使用它来获取指向字符串末尾的指针,然后我将指针向后移动4步,从而给指针指向字符串的最后4个字符。

然后我将最后4个字符与“.avi”进行比较,如果它们匹配,strcmp返回0或逻辑FALSE,我在’if’条件下反转。

这是一个测试的通用函数:

 int EndsWithTail(char *url, char* tail) { if (strlen(tail) > strlen(url)) return 0; int len = strlen(url); if (strcmp(&url[len-strlen(tail)],tail) == 0) return 1; return 0; }