如何将字符串的最后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; }