c - 如何检查字符串末尾是否包含子字符串?

标签 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);
}

最佳答案

您的函数有问题:

  • 您省略了返回类型,标准 C 不再支持此类型。
  • 第一个for循环有效地删除了 str2 指向的字符串。甚至不能保证它有一个空终止符。
  • while如果 str1 则循环调用未定义的行为不包含.或者如果它短于 str2 .
  • 不要对 ASCII 值进行硬编码,例如 97122 。它既不便携也不可读。使用'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);
}

关于c - 如何检查字符串末尾是否包含子字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41652654/

相关文章:

c - 使用 LibJpeg 将 YUV 转换为 jpeg 时出现段错误

c - 使用值而不是指针作为函数参数

c - 如何实现终端滚动

c++ - 是否有任何关于从 C 迁移到 C++ 的指南

c - CUDA 中的矩阵运算

c - 是否在其中的部分中为 "grow"并行分配了一个工作组?

c - 为什么这些构造使用增量前和增量后未定义的行为?

java - 每个蓝牙设备都有自己唯一的 MAC 地址吗?我们如何在应用程序中访问它?

c 在 float 中用逗号替换点

c - 括号平衡程序崩溃(c)