5

我正在尝试为我必须说的 for 循环创建一个条件,(c<wordlength)但我不确定如何找到单词的长度。

所以可以说我有一个叫...

char shopping[10][10]={"BAGELS","HAM","EGGS"};

找到 shopping[0] 有 6 个字母的正确语法是什么?

4

4 回答 4

6

正确的语法是

strlen(shopping[0])

这将返回一个size_t不包含 NUL 终止符的类型值。

详情请参阅man strlen

如果您将strlen(unchanging_string)其用作循环的终止条件,谨慎的做法是在循环之前调用它一次,而不是在每次迭代时调用它。

循环字符的另一种方法shopping[0]如下:

char *s = shopping[0];
while (*s) {
  /* (*s) is the current character */
}
于 2013-04-04T17:27:28.690 回答
5
size_t len = strlen(shopping[0]);

但是请注意,您不应该写:

for (size_t i = 0; i < strlen(shopping[0]); i++)

这可能会导致长字符串的性能不佳。采用:

size_t len = strlen(shopping[0]);
for (size_t i = 0; i < len; i++)
于 2013-04-04T17:27:51.723 回答
2

实际上shopping[0] 有 7 个字符,一个你忘记了\0用于字符串终止的字符。虽然strlen()给你字符串的长度,但之前的字符数\0

strlen(shopping[0])

但总字符数strlen(shopping[0]) + 1= 7

在记忆中,你shopping[0]是这样的:

+----+----+----+---+---+----+----+----+---+---+ 
| 'B'| 'A' |'G'|'E'|'L'| 'S'|'\0'| 0  | 0 |   |
+----+----+----+---+---+----+----+----+---+---+
                              ^ `\0` also a char in shopping[0]

编辑

当我再次阅读您的问题时,您说 6个字母所以strlen(shopping[0] )您的答案给了您 6 个。

因为您想要一个循环来查找字母数量(我的答案中的字符不是'\0'),所以调用strlen()是没用的。我希望您应该利用 C 中的空终止字符串:

int num=0;
for(num = 0; shopping[0][num]!='\0'; num++);
printf("\n  number of letters are %d\n",num);

我认为其他答案不好,他们使用 strlen() 是不必要的。如果我遗漏了什么,请告诉我

于 2013-04-04T17:29:42.197 回答
1

您可以使用for循环编写代码来查找购物数组中每个元素的大小:

for(i =0;i<10;i++)
{
    j=0;
    while(shopping[i][j])
    {
        j++;
    }
}

wherej将返回每个购物数组元素的大小。

于 2013-04-04T17:38:53.640 回答