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

时间:2011-03-14 10:16:00

标签: c url if-statement string

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

6 个答案:

答案 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;
}