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

时间:2017-08-17 10:15:11

标签: 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 (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;}
}

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:3)

此代码甚至无法编译。 主要问题在这里:

char[] apples = moves;
  1. 这是无效的语法。如果您要声明数组,[]会在标识符后面,例如char apples[]

  2. 即使更正了,指针(moves)也不是数组的有效初始值设定项:

    • 当您在声明中省略数组的维度时,必须从初始值设定项推导出维度。仅使用指针就不可能这样,指针中没有大小信息。
    • 在C。
    • 中分配数组不可能
  3. 如果您确实希望将字符串复制到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;

希望它会有所帮助!!