一个 C++ 函数,用于测试 C 字符串是不是以后缀结尾

Posted

技术标签:

【中文标题】一个 C++ 函数,用于测试 C 字符串是不是以后缀结尾【英文标题】:A C++ function that tests if the C string ends with a suffix一个 C++ 函数,用于测试 C 字符串是否以后缀结尾 【发布时间】:2014-09-11 01:35:26 【问题描述】:
bool endsWith(const char* str, const char* suffix)

测试 C 字符串 str 是否以指定的后缀结尾,即 C 字符串后缀。

例子:

endsWith("hot dog", "dog")        // Should return true
endsWith("hot dog", "cat")        // Should return false
endsWith("hot dog", "doggle")     // Should return false

我有:

bool endsWith(const char* str, const char* suffix)
if(strstr(str, suffix)==(strlen(str)-strlen(suffix)))
return true;
else
return false;

【问题讨论】:

strstr 返回一个指针,而不是一个整数。 请不要用隐形墨水写你的问题。 你会考虑std::regex还是std::search 如果后缀出现在str 中的其他地方,这将失败(假阴性)。你熟悉strcmp吗? 只能使用:size_t str_len = strlen(str), suffix_len = strlen(suffix); return str_len >= suffix_len && strcmp(str + str_len - suffix_len, suffix) == 0; 【参考方案1】:

另一个不使用std::string 的解决方案可能是这样的:

bool strendswith(const char* str, const char* suffix)

    int len = strlen(str);
    int suffixlen = strlen(suffix);
    if(suffixlen > len)
    
        return false;
    

    str += (len - suffixlen);
    return strcmp(str, suffix) == 0;

【讨论】:

【参考方案2】:

你并没有真正提出问题,但你提到了一个 C++ 函数,所以:

bool endsWith(std::string str, std::string suffix)

  if (str.length() < suffix.length())
    return false;

  return str.substr(str.length() - suffix.length()) == suffix;

【讨论】:

你最好接受const引用的参数并使用std::string::compare来避免来自substr的临时参数。

以上是关于一个 C++ 函数,用于测试 C 字符串是不是以后缀结尾的主要内容,如果未能解决你的问题,请参考以下文章

测试一个 C++ dll 函数

用于对字符串进行排序的 C++ sort() 函数

字符串函数不返回字符串? c++ [关闭]

c 语言是不是需要头文件和库函数

C语言中string指令是啥?

传递给函数时找不到c ++向量?