我试图实现strcmp
int strCmp(char string1[], char string2[])
{
int i = 0, flag = 0;
while (flag == 0) {
if (string1[i] > string2[i]) {
flag = 1;
} else
if (string1[i] < string2[i]) {
flag = -1;
} else {
i++;
}
}
return flag;
}但是我仍然认为用户将输入相同的字符串,因为这个函数可以使用1和-1,但是它不返回0。有人能帮忙吗?请不要指指点点!
发布于 2016-01-19 10:15:52
您似乎希望避免指针算法,这是一个遗憾,因为这使解决方案更短,但您的问题是,您只是扫描结束的字符串。添加显式中断将有效。您的程序略有修改:
int strCmp(char string1[], char string2[] )
{
int i = 0;
int flag = 0;
while (flag == 0)
{
if (string1[i] > string2[i])
{
flag = 1;
}
else if (string1[i] < string2[i])
{
flag = -1;
}
if (string1[i] == '\0')
{
break;
}
i++;
}
return flag;
}较短的版本:
int strCmp(char string1[], char string2[] )
{
for (int i = 0; ; i++)
{
if (string1[i] != string2[i])
{
return string1[i] < string2[i] ? -1 : 1;
}
if (string1[i] == '\0')
{
return 0;
}
}
}发布于 2016-01-19 09:47:18
嗯..。太复杂了。去找这个吧:
int strCmp(const char* s1, const char* s2)
{
while(*s1 && (*s1 == *s2))
{
s1++;
s2++;
}
return *(const unsigned char*)s1 - *(const unsigned char*)s2;
}它按预期返回<0,0或>0
没有指针你是做不到的。在C中,数组索引使用指针。
也许您想避免使用*操作符?:-)
发布于 2016-01-19 10:02:17
首先,标准C函数strcmp比较字符串元素的类型为unsigned char。
其次,参数应该是指向常量字符串的指针,以提供常量字符串的比较。
该函数可以按以下方式编写
int strCmp( const char *s1, const char *s2 )
{
const unsigned char *p1 = ( const unsigned char * )s1;
const unsigned char *p2 = ( const unsigned char * )s2;
while ( *p1 && *p1 == *p2 ) ++p1, ++p2;
return ( *p1 > *p2 ) - ( *p2 > *p1 );
}https://stackoverflow.com/questions/34873209
复制相似问题