【发布时间】:2017-12-02 22:43:37
【问题描述】:
所以我试图比较 2 个字符串,如果第一个 (x) 小于第二个,则 twoStrComp 方法应返回 true,否则应为 false。
这是我的代码,虽然当我尝试在终端上运行它时,什么都没有出现... 好像它忽略了我的代码.. 另外我想知道指针是否会更有效,但我不确定如何声明它们,我可以做 twoStrComp(*x,*y) 吗? 原始代码:
#include <stdio.h>
#include <stdbool.h>
bool twoStrComp(char[], char[]);
int main(void)
{
char x[]= "test";
char y[]= "another";
twoStrComp(x,y);
}
bool twoStrComp(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=0;
i++
}
else
{
return 1;
}
}
return flag;
}
新版本:
bool twoStrComp(char[], char[]);
int main(void)
{
char x[]= "atest";
char y[]= "another";
bool ans = twoStrComp(x,y);
printf("%s", ans ? "true" : "false");
}
bool twoStrComp(char string1[], char string2[] )
{
int i=0, flag=0;
bool value = false;
while(flag==0) {
if (string1[i]>string2[i])
{
flag=1;
value = false;
}
else if (string1[i]<string2[i])
{
flag=-1;
value = true;
}
else if (string1[i]==string2[i])
{
return 0;
value = true;
}
else
{
i++;
}
}
if(flag == 1)
return (value == false);
if(flag == -1)
return (value == true);
return value;
}
【问题讨论】:
-
您正在调用
twoStrComp,然后您将丢弃结果并静默退出。你想做什么呢?也许打印一些东西?你知道printf怎么用吗? -
@TomKarzes 哦,哇!我以为我是在返回标记一个布尔值(真或假),所以它会打印真或假。如果 x y 那么 flag == false。 mmh 对于 printf,是否是 printf(" %s \n", twoStrComp(x,y)); ?
-
您希望在终端中看到什么?为什么您认为终端上没有打印任何内容?您的程序中是否有地方打印比较函数的结果?
-
查看对
twoStrComp的调用。您正在将返回值放在地板上。 whattwoStrComp返回并不重要,因为你忽略了它。 -
比较一个字符串的 2 个字符可以产生 3 种不同的结果:小于、等于、大于。你最后的
else部分永远不会到达。相反,如果您找到前 2 个匹配字符,您将返回 0。
标签: c string string-comparison