2
  1. 我将如何获得以下字符串的长度以及数组大小?

    字符 str [] = {};

        str[0] = "He";
        str[1] = "llo";
        str[2] =  " Wor";
        str[3] ="ld";
    

  2. 以及如何将它们存储在多维数组中?所以这个数组看起来像这样:

    char strstr [str 的大小][str 的字符串长度];

strstr[][]数组维度应该是1.number
of array-elements of str
2.number of all chars in str。在 的情况下 strstr[3][1],这将是“ d ”。如果不首先初始化str -array,这
可能吗?


[编辑] 我明白了,第二维strstr没有意义。它应该是每个元素的长度,而不是 [/edit]*str中的完整字符数*str

4

4 回答 4

5

这可能会做你想要的,但它并不完全符合你的要求。

#include <stdio.h>

char *strs[] = {
    "foo",
    "bar",
    "bazy"
};

int main() {
    printf("%d - %s\n", strlen(strs[0]), strs[0]);
    printf("%d - %s\n", strlen(strs[1]), strs[1]);
    printf("%d - %s\n", strlen(strs[2]), strs[2]);
    return 0;
}

输出

3 - foo
3 - bar
4 - bazy

请注意,您只有几种存储数组的可能性。您可以执行此解决方案所做的事情(创建一个指向数组的指针数组),在一个大数组中创建一个“压缩”数组列表,或者创建一个过大的二维数组。


“压缩”数组将采用以下格式:

char strs[] = "foo\0bar\0bazy"; // array is {f,o,o,\0,b,a,r,\0,b,a,z,y,\0}

这种格式的问题是访问第一个元素之后的任何内容都有些棘手,并且通常涉及在数组中进行线性搜索。(或保留一个单独的地址表......就像第一个解决方案一样)


二维数组要求您指定所有大小,如下所示:

char strs[3][5] = {
   "foo",
   "baz",
   "baxy"
};

int main() {
    printf("%d - %s\n", strlen(strs[0]), strs[0]);
    printf("%d - %s\n", strlen(strs[1]), strs[1]);
    printf("%d - %s\n", strlen(strs[2]), strs[2]);
    return 0;
}

这可能在内存中是这样排列的:

{f,o,o,\0,*,b,a,z,\0,*,b,a,x,y,\0} (the *'s could be anything, most dependent on your compiler)

由于编译器知道每个字符串恰好占用 5 个字节,因此它可以轻松计算出后面元素的位置。

于 2013-03-19T15:50:03.273 回答
2

在 C 中声明数组时,必须声明其大小,除非同时提供初始化值。这是因为数组在内存中是按顺序排列的,因此计算机需要知道要留出多少空间。

此外,char str [] = {....}将声明一个字符数组,而不是字符串数组。字符串是一个字符数组,因此str只是一个字符串。

要创建一个字符串数组,您需要执行以下操作:

char strs[num_of_strings][max_length_of_strings+1];
strcpy(strs[0],"string1");
strcpy(strs[1],"string2");
...

在这个问题上对其他选项进行了更深入的讨论。

如果您指定max_length_of_strings但随后从无法保证短于 的源字符串中复制,则要max_length_of_strings使用strncpy而不是strcpy. 在这种情况下,您还希望确保生成的字符串以空结尾,您可以通过循环来完成

strs[i][max_length_of_strings] = '\0';

要获取以 null 结尾的字符串的长度,请使用函数strlen.

至于你问题的第二部分,上面应该清楚地说明如何创建一个更高维的数组。我会提供更多细节,但我不确定您希望这个数组做什么。当您说“str 中所有字符的数量”时,您是指存储在strs数组中的字符串的最大长度吗?

如果是这样,您无需担心。像我上面解释的那样对数组进行编程strs已经为您提供了这个功能:由于字符串只是char's 的数组,因此您可以像索引 's 一样索引字符串char

如果上述任何内容不清楚,请告诉我,我会尽力解释得更好。

于 2013-03-19T15:59:12.643 回答
1

如果你想要一个实际的数组,像这样:

    char str[4][5];  // holds up to 4 characters in each
    strcpy(str[0], "He");
    strcpy(str[1], "llo");
    strcpy(str[2], " Wor");
    strcpy(str[3], "ld");
于 2013-03-19T15:53:35.780 回答
0

要在 C 中获取字符串的长度,您将使用strlen并传递字符串。

int len = strlen(array[0]);
于 2013-03-19T15:47:50.540 回答