如何检查字符串是否包含最后的子字符串 - C

时间:2017-01-14 17:05:30

标签: c

大家好我有一个字符串(在这种情况下是一个网站(www.example.com)),我想检查它以.com结束我该怎么做? 我在这里感到很抱歉,如果它对某些人有点烦恼(我最终会变得更好)。 这是我试过的:

compName(char str1[], char str2[])
{
    int i = 0, c = 0;
    for (i; str2[i] != 0; i++)
        str2[i] = 0;
    while (str1[i] != '.')
        i++;
    i++;
    while (str1[i] != '.')
    {
        str2[c] = str1[i];
        i++;
        c++;
    }
    str2[i] = 0;
    if (str2[0] >= 97 && str2[0] <= 122)
        str2[0] = str2[0] - 32;
    printf("%s", str2);
}

1 个答案:

答案 0 :(得分:2)

您的功能有问题:

  • 您省略了返回类型,标准C不再支持。
  • 第一个for循环有效地删除str2指向的字符串。不能保证它甚至有一个空终止符。
  • while循环如果str1不包含.或者短于str2,则会调用未定义的行为。
  • 不要对97122等ASCII值进行硬编码。它既不便携也不可读。使用'a''z'或最好使用<ctype.h>
  • 中定义的函数

这是一个简单的字符串函数,用于您的目的:

int str_ends_with(const char *s, const char *suffix) {
    size_t slen = strlen(s);
    size_t suffix_len = strlen(suffix);

    return suffix_len <= slen && !strcmp(s + slen - suffix_len, suffix);
}