【问题标题】:How do I get the length of a string stored as a character [closed]如何获取存储为字符的字符串的长度 [关闭]
【发布时间】:2017-08-17 10:15:10
【问题描述】:

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

基本上,我想根据输入在函数结束时查看 a 和 b 是否都以 0 结束。例如,如果输入是“UD”,它应该返回真,但如果输入是“LL”,它应该返回假。

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

任何帮助将不胜感激

【问题讨论】:

  • 你听说过strlen吗?
  • 代码没有意义。 moves是什么,在哪里声明的?
  • @ncoder 你的代码中有很多错误,都是基本的C知识错误。仅修复其中一个不会修复您的代码。我们一次只为你调试一个小错误对我们来说是没有意义的。你需要回去学习你的基础 C。到目前为止建议的所有更改都是正确的。
  • "AP" 调用的代码给出了true,就像它现在呈现的那样。仍然不清楚到底是什么问题。
  • 变色龙问题 :( @ncoder 我们不是来做增量代码修复的

标签: c


【解决方案1】:

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

char[] apples = moves;
  1. 这是无效的语法。如果你想声明一个数组,[]在标识符之后,比如char apples[]

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

    • 如果在声明中省略了数组的维度,则必须从初始值设定项推导出维度。仅使用指针是不可能的,指针中没有大小信息。
    • 在 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 &amp;&amp; ( b == 0 )。如果a 不是 0,这在逻辑上是 true,所以当 a 不为 0 且 b 为 0 时整个表达式为 trueexactly . 你似乎想要:

    if (a == 0 && b == 0) {return true;}

真正的 uhm ... "surprising" ... 关于代码的事实是数组根本没有任何用途。您可以直接通过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;}
}

这不会改变函数的语义,只是省略了您完全错误的部分。

【讨论】:

    【解决方案2】:

    没有必要使用另一个数组,而且你初始化 apples[] 数组的方式也是错误的。

    即便如此,如果您想使用另一个数组,您也可以将 apples[] 声明更改如下:

    char apples[100];
    strcpy(apples, moves);
    

    否则:

    char *apples = moves;
    

    希望对你有帮助!!

    【讨论】:

      猜你喜欢
      • 2014-11-20
      • 2011-05-13
      • 1970-01-01
      • 2012-12-19
      • 1970-01-01
      • 2015-10-22
      • 2012-07-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多