【问题标题】:How to see if string is in array of strings C如何查看字符串是否在字符串数组中C
【发布时间】:2021-06-02 19:33:41
【问题描述】:

C 中的整体数组让我非常困惑,所以我完全不知道如何做到这一点。这是我正在尝试做的一个示例。

string hello = "hello";
string array[20] = {"e", "cat", "tree", "hello"};

for (int i = 0; i < 3; i++) {
    if (!strcmp(array[i], hello)) {
        printf("Hello is in the array");
    }
}

【问题讨论】:

  • string的定义是什么?只是typedef char * string;吗?
  • @Alexander OP 已经用 cs50 标记了这个问题,我 认为cs50.h string 确实是 char *,所以可能是这样。
  • 除了用 4 个值初始化一个包含 20 个事物的数组的奇怪之处之外,这可以通过将 &lt; 3 更改为 &lt;= 3&lt; 4 来纠正。我想这只是一个错字,对吧?
  • 您的问题得到解答了吗?

标签: arrays c cs50


【解决方案1】:

您的问题在于for 循环退出条件,您的循环在i == 3 之前停止,这是您数组的最后一个索引。因为它从来没有达到这个目标,所以它永远不会将您的字符串与最后一个元素("hello" 所在的位置)进行比较。

#include <stdio.h>
#include <string.h>

typedef char * string;

int main(int argc, char *argv[]) {
    string hello = "hello";
    string array[20] = {"e", "cat", "tree", "hello"};
    
    for (int i = 0; i < 4 /* not 3 */; i++) {
        if (!strcmp(array[i], hello)) {
            printf("Hello is in the array");
        }
    }
}

您刚刚了解到,为什么永远不应该像这样对数组的计数进行硬编码。您不可避免地会编辑数组,而忘记更新所有使用它的地方的硬编码计数。

试试这个吧:

#include <stdio.h>
#include <string.h>

typedef char * string;

int main(int argc, char *argv[]) {
    string hello = "hello";
    string array[] = {"e", "cat", "tree", "hello"};
    size_t array_count = sizeof(array) / sizeof(*array);

    for (int i = 0; i < array_count; i++) {
        if (!strcmp(array[i], hello)) {
            printf("Hello is in the array");
        }
    }
}

【讨论】:

  • 澄清一下:array_count 的计算方法是将array 的大小除以char 的四个指针组成的数组,*array 的大小是一个指向char 的指针char.
猜你喜欢
  • 1970-01-01
  • 2012-01-22
  • 1970-01-01
  • 1970-01-01
  • 2021-06-04
  • 2011-02-24
  • 2013-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多