以下是我的一个有趣问题的代码:
基本上我想看看a和b是否都在函数结束时根据输入结束为0。例如,如果输入为" UD",则应返回true,但如果输入为" LL",则应返回false。
bool judgeCircle(char* moves) {
int a = 0;
int b = 0;
char[] apples = moves;
for (int i = 0; i < strlen(moves); i++)
{
if (apples[i] == 'U') { a++;}
if (apples[i] == 'D') { a--;}
if (apples[i] == 'L') { b--;}
if (apples[i] == 'R') { b++;}
}
if (a && b == 0) {return true;}
else {return false;}
}
任何帮助将不胜感激
答案 0 :(得分:3)
此代码甚至无法编译。 主要问题在这里:
char[] apples = moves;
这是无效的语法。如果您要声明数组,[]
会在标识符后面,例如char apples[]
。
即使更正了,指针(moves
)也不是数组的有效初始值设定项:
如果您确实希望将字符串复制到char
数组,则必须执行以下操作:
char apples[strlen(moves) + 1]; // one extra byte for terminating 0
strcpy(apples, moves);
这使用在C99中引入的可变长度数组,在C11中是可选的,但受大多数编译器支持。如需替代方案,请亲自做一些研究。
此外,这条线不会做你可能认为它做的事情:
if (a && b == 0) {return true;}
条件评估为a && ( b == 0 )
。如果a
不 0,则逻辑 true ,因此当a不为0且b时,整个表达式为真完全是0.您似乎想要:
if (a == 0 && b == 0) {return true;}
真正的呃......&#34; 令人惊讶&#34; ...关于代码的事实是阵列完全没有用处。您可以直接通过moves
访问角色,而无需复印:
bool judgeCircle(char* moves) {
int a = 0;
int b = 0;
for (int i = 0; i < strlen(moves); i++)
{
if (moves[i] == 'U') { a++;}
if (moves[i] == 'D') { a--;}
if (moves[i] == 'L') { b--;}
if (moves[i] == 'R') { b++;}
}
if (a == 0 && b == 0) {return true;}
else {return false;}
}
这并没有改变任何关于函数语义的内容,但只是遗漏了完全错误的那一部分。
答案 1 :(得分:1)
没有必要使用另一个数组,并且你初始化apples []数组的方式也是错误的。
即便如此,如果你想使用另一个数组,那么你可以按如下方式更改apples []声明:
char apples[100];
strcpy(apples, moves);
或者:
char *apples = moves;
希望它会有所帮助!!