所以我试图比较2个字符串,如果第一个字符串(x)小于第二个字符串,则方法twoStrComp应返回true,否则它应该为false。
这是我的代码,虽然当我尝试在我的终端上运行时没有出现任何问题...... 好像它忽略了我的代码..另外我想知道它是否会更有效的指针,但我不知道如何声明它们,我可以做两个StrComp(* 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;
}
答案 0 :(得分:1)
所以我试图比较2个字符串,如果第一个字符串(x)小于第二个字符串,则方法twoStrComp应返回true,否则它应该为false。
我建议你的功能更好的名字。它不是通用比较函数,但它更像是isSmaller
函数。您不关心相同或更大值的单独案例。
这是我的代码,虽然当我尝试在我的终端上运行它时没有出现
如果您想在控制台上看到任何内容,则需要打印一些内容。您可以将printf
用于此目的。
另外我想知道指针是否更有效但我不确定如何声明它们,我可以做两个StrComp(* x,* y)吗?
如果要传递指针,可以这样声明:
bool twoStrComp(const char *x, const char *y)
但是,.... 将数组作为参数传递会导致传递指针。当在函数的参数列表中使用时,数组衰减为指针。你不会看到任何性能提升。
关于你的代码...... 我指的是编辑历史中列为版本2的版本。
您返回1或-1。当您使用类型bool
作为返回类型时,您应该考虑使用TRUE
或FALSE
。或者至少在某些情况下返回0。
设置flag=0;
没有任何意义。如果它之前不是0,你就会离开循环。
您不会检查是否比字符串末尾更新。
修复这些问题并包含一些测试用例的版本可能如下所示:
#include <stdbool.h>
#include <stdio.h>
bool twoStrComp(char string1[], char string2[]);
int main(void)
{
char x[]= "test";
char y[]= "another";
bool isSmaller = twoStrComp(x,y);
printf("Is x(%s) smaller than y(%s)? %s\n", x, y, isSmaller ? "YES" : "NO");
isSmaller = twoStrComp(y,x);
printf("Is y(%s) smaller than x(%s)? %s\n", y, x, isSmaller ? "YES" : "NO");
char x2[]= "aaa";
char y2[]= "aab";
isSmaller = twoStrComp(x2,y2);
printf("Is x2(%s) smaller than y2(%s)? %s\n", x2, y2, isSmaller ? "YES" : "NO");
isSmaller = twoStrComp(y2,x2);
printf("Is y2(%s) smaller than x2(%s)? %s\n", y2, x2, isSmaller ? "YES" : "NO");
isSmaller = twoStrComp(x2,x2);
printf("Is x2(%s) smaller than x2(%s)? %s\n", x2, x2, isSmaller ? "YES" : "NO");
}
bool twoStrComp(char string1[], char string2[])
{
int i=0;
while (true)
{
if (string1[i] < string2[i])
return true; // First one smaller than second one...
else if (string1[i] > string2[i])
return false; // First one larger than second one...
else if (!string1[i])
return false; // identical and end of strings reached.
else
i++; // identical, not yet decided.
}
// We cannot get here, but the compiler complains...
return false;
}