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 (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;}
}

如有任何帮助,我们将不胜感激

最佳答案

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

char[] apples = moves;
  1. 这是无效语法。如果您想声明一个数组,[] 位于标识符之后,例如 char apples[]

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

    • 当您在声明中省略数组的维数时,必须从初始值设定项推导出该维数。仅使用指针这是不可能的,指针中没有大小信息。
    • 在 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 )。如果a0,则逻辑上为真,因此当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;}
}

这不会改变函数语义的任何内容,只是遗漏了您完全错误的部分。

关于c - 如何获取存储为字符的字符串的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45732390/

相关文章:

c - 从 Char* 数组中提取数字(C 字符串)

c - 从 3 个数组中找出 3 个数字 a、b、c,其总和等于给定数字 T?

c++ - xerces-c 2.8 : error while loading shared libraries

c - 了解 C 中的数组大小

c - struct 中的匿名 union 不在 c99 中?

c - C语言中如何用宏将符号转为文字?

C - (malloc、calloc 或静态)从函数返回的二维字符数组

c - 数组类型具有不完整的元素类型

在指针上调用 free 两次

c - 传递函数指针的参数