【发布时间】:2017-04-28 05:57:35
【问题描述】:
我想制作自己的 strcmp 函数,就像 C 中的函数一样。
int my_cmp(const char* str1, const char* str2)
{
int index;
for (index = 0; str1[index] != '\0' && str2[index] != '\0'; index++)
if (str1[index] != str2[index])
return (str1[index] - str2[index]);
return 0;
}
我说的对吗? 我知道并非所有的字符串都具有相同的长度。 我不确定 for 语句的条件。
【问题讨论】:
-
当字符串长度不同但排序器的内容与最长的字符串相同时,您的函数不正确。
-
你需要做一个无符号减法。如果字符串长度不等,则它们不相等。
-
如果您将此作为学习练习,那很好。但是,请注意 strcmp 可能会被大量使用,因此标准库实现往往是高度优化的 - 内联和 SIMD 操作用于每次迭代测试多个字符。
-
@InternetAussie:该函数也存在于 c++ 中,并且具有相同的语义。为什么要更改标签?
-
@MikeMB 是的,但通常的 C++ 方法是实例化两个
std::string对象并使用各种<、>、... 运算符来比较字符串。strcmp与 C 的用法更相关。