2013-03-19 64 views
0
  1. 如何获取下面的字符串的长度以及数组大小?
    如何获得存储在数组(C)中的字符串长度

    char str [] = {};

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

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

    char strstr [str的大小] [str的长度];

strstr[][]阵列尺寸应STRSTR
2.number所有字符的数组元素的
1.number。在strstr[3][1]的情况下,这将是“d”。
如果没有初始化str -array,这是可能的吗?


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

+4

'char str [] = {};'。那么,我已经看到很多方法在脚下射击自己,这是一个新的。 – Zeta 2013-03-19 15:45:19

+0

这些是两个问题,每个问题选择一个。在你问任何一个人之前,练习你自己的问题解决能力。 – moooeeeep 2013-03-19 15:47:04

+1

作为一个旁注,使用以'str'开头的名称不是一个好主意,因为那些已经被标准库使用。具体而言,'strstr'是查找一个字符串是否包含另一个字符串的函数。 – 2013-03-19 18:30:08

回答

3

这可能会做你想做的,但它不完全是你所要求的。

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

Output

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} 

这种格式的问题是,它是有点棘手的第一个元素后访问任何内容,通常涉及通过阵列线性搜索。 (或保留一个单独的地址表...而不是像第一个解决方案)


2-d阵列需要您指定的所有尺寸,看起来像这样:

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个字节,因此它可以轻松地计算后面元素的位置。

+0

在不知道字符串大小的情况下,调整一个巨大的大小值对我来说是不舒服的;特别是动态字符串,可能会有很大差异。 – 2013-03-19 20:18:07

+0

实际上,这是有帮助的,但现在我需要颠倒的情况; - 所以我有一个字符串,并希望通过空间符号区分它 - 因此我会得到一个字符串数组。我将如何实现这一目标?所以string是str =“foo baz baxy”,结果是str1 =“foo”; STR2 = “baz” 的; STR3 = “baxy”? – 2013-03-25 13:11:39

+0

@kt:这是一个不同的问题,但你应该能够看到一些解决方案[使用正确的搜索条件](http://stackoverflow.com/search?q=splitting+a+string+by+space+%5BC %5D) – jkerian 2013-03-25 15:29:01

0

为了获得在C字符串你会使用strlen并通过字符串的长度。

int len = strlen(array[0]); 
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"); 
2

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

此外,char str [] = {....}将宣布的字符,不的阵列的阵列。字符串是一个字符数组,因此str只是一个字符串。

要创建一个字符串数组,你需要做的是这样的:

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

那里this question是一个更在其他选项深入的讨论。

如果你指定max_length_of_strings但随后从源字符串,你不能保证复制短于max_length_of_strings,要使用strncpy而不是strcpy。在这种情况下,你还需要确保所得到的字符串是空终止,您可以通过循环

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

为了得到一个空值终止字符串的长度做,您使用的功能strlen

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

如果是这样,您不需要担心这一点。编程你的strs数组就像我上面解释过的那样,已经可以为你提供这个功能:由于字符串只是char的数组,所以你可以用索引到char的相同方式索引字符串。

让我知道如果上述任何不清楚,我会尽力解释它。

相关问题