【发布时间】:2014-04-09 20:52:13
【问题描述】:
我的老师让我用 C 语言编写自己的 strcmp() 函数。我确实创建了自己的上述函数版本,我希望得到一些反馈。
int CompareTwoStrings ( char *StringOne, char *StringTwo ) {
// Evaluates if both strings have the same length.
if ( strlen ( StringOne ) != strlen ( StringTwo ) ) {
// Given that the strings have an unequal length, it compares between both
// lengths.
if ( strlen ( StringOne ) < strlen ( StringTwo ) ) {
return ( StringOneIsLesser );
}
if ( strlen ( StringOne ) > strlen ( StringTwo ) ) {
return ( StringOneIsGreater );
}
}
int i;
// Since both strings are equal in length...
for ( i = 0; i < strlen ( StringOne ); i++ ) {
// It goes comparing letter per letter.
if ( StringOne [ i ] != StringTwo [ i ] ) {
if ( StringOne [ i ] < StringTwo [ i ] ) {
return ( StringOneIsLesser );
}
if ( StringOne [ i ] > StringTwo [ i ] ) {
return ( StringOneIsGreater );
}
}
}
// If it ever reaches this part, it means they are equal.
return ( StringsAreEqual );
}
StringOneIsLesser、StringOneIsGreater、StringsAreEqual 分别定义为 const int,其值分别为:-1、+1、0。
问题是,我不确定,例如,我的 StringOne 的长度是否比我的 StringTwo 短,这自动意味着 StringTwo 更大,因为我不知道 strcmp() 是如何特别实现的。我需要你的一些反馈。
【问题讨论】:
-
那么问题是什么?
-
这不是一般反馈的最佳站点。 CodeReview.stackexchange.com 对此很有帮助。鉴于此,我回答的问题是“如果 StringOne 的长度小于我的 StringTwo,[是否] 这自动意味着 StringTwo 更大?”
-
你不是把问题复杂化了很多吗?一个标准的
strcmp实现主体可以很容易地写成 3 行......当它们指向相同的字符时向前移动两个指针(注意在字符串终止符处停止),然后只比较你到达的字符,这将成为第一个不同的人。 -
这会将两个字符串都扫描到完整长度,可能会多次扫描,而正统的
strcmp()通常只需要查看第一个字符即可找到差异。如果字符串的长度为数千字节,那么这对性能造成很大影响。 -
提示:不要在 for 循环中使用 strlen(string1)。这对速度非常不利。使用 aux 变量,例如:int size = strlen(string1),然后在循环中使用该变量。 (for(i=0;i