C 如何获取存储为字符的字符串的长度

C 如何获取存储为字符的字符串的长度,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

以下是我针对一个有趣问题的代码:

基本上,我想看看在基于输入的函数结束时,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;}
}
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我们不是来做增量代码修复的