C 如何获取存储为字符的字符串的长度
以下是我针对一个有趣问题的代码: 基本上,我想看看在基于输入的函数结束时,a和b是否都最终为0。例如,如果输入为“UD”,则应返回true,但如果输入为“LL”,则应返回falseC 如何获取存储为字符的字符串的长度,c,C,以下是我针对一个有趣问题的代码: 基本上,我想看看在基于输入的函数结束时,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 (app
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;}
}
bool判断循环(字符*移动){
int a=0;
int b=0;
char[]苹果=移动;
对于(int i=0;i
任何帮助都将不胜感激此代码甚至不编译。主要问题是:
char[] apples = moves;
[]
将放在标识符之后,就像char apples[]
一样移动
)也不是数组的有效初始值设定项:
- 当您在声明中省略数组的维度时,必须从初始值设定项推导维度。这是不可能的,因为指针中没有大小信息
- 在C中分配数组是不可能的
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,这在逻辑上是正确的,因此当a为非0且b为0时,整个表达式完全是正确的。你似乎想要:
if (a == 0 && b == 0) {return true;}
什么是真正的嗯。。。“令人惊讶”。。。关于代码,事实是数组没有任何用途。您可以通过
移动
直接访问字符,而无需复制:
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;}
}
bool判断循环(字符*移动){
int a=0;
int b=0;
对于(int i=0;i
这不会改变函数的任何语义,只会将完全错误的部分删除。不需要使用另一个数组,而且初始化apples[]数组的方式也是错误的 即使这样,如果要使用另一个数组,也可以按如下方式更改apples[]声明:
char apples[100];
strcpy(apples, moves);
否则:
char *apples = moves;
希望这会有帮助 你听说过斯特伦吗?这个代码没有意义。什么是
移动
,它在哪里声明?@n因为代码中有许多错误,都是基本的C知识错误。仅仅修复其中一个并不能修复您的代码。对于我们来说,一次只调试一个小错误来调试代码是没有意义的。你需要回去学习你的基本C语言。目前为止建议的所有更改都是正确的。用“AP”
调用的代码给出了当前显示的true
。尚不清楚到底是什么问题。变色龙问题:(@ncoder我们不是来做增量代码修复的