想象一下,我有两个字符串,其中一个是“/sdcard/test.avi”之类的网址,另一个是“/sdcard/test.mkv”。我想编写一个if语句,查看字符串的最后四个字符是否为“.avi”或者不是C.我怎么能这样做?使用strcmp或什么以及如何使用?
答案 0 :(得分:21)
如果你有一个指向char的指针数组str
,那么这个:
int len = strlen(str);
const char *last_four = &str[len-4];
将为您提供指向字符串最后四个字符的指针。然后,您可以使用strcmp()
。请注意,您需要处理(len < 4)
的情况,在这种情况下,上述内容无效。
答案 1 :(得分:1)
在纯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;
}
答案 2 :(得分:1)
只需执行if ( strcmp(str1+strlen(str1)-4, str2+strlen(str2)-4) == 0 ) {}
即可。
确保两个字符串的长度至少为4个字符。
答案 3 :(得分:1)
这个怎么样......
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'条件下反转。
答案 4 :(得分:0)
这是一个测试的通用函数:
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;
}
答案 5 :(得分:0)
#include <dirent.h>
#include <string.h>
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;
}