I tried to implement 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;
}
but I'm stuck with the case that the user will input the same strings, because the function works with 1
and -1
, but it's doesn't return 0
. Can anyone help? And please without pointers!
You seem to want to avoid pointer arithmetics which is a pity since that makes the solution shorter, but your problem is just that you scan beyond the end of the strings. Adding an explicit break will work. Your program slightly modified:
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;
}
A shorter version:
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;
}
}
}