一个 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 字符串是不是以后缀结尾的主要内容,如果未能解决你的问题,请参考以下文章