我遇到了一个问题,当一个句子中的字符指针存储到一个新数组中时,如果我在句子中添加一个'\ 0'字符来分割程序提前结束的单词,但是如果我这样做的话不添加该字符,然后新数组存储太多单词。
int prevSpace = 1;
for(int i = 0; i < (strlen(sentence)); i++){
if(sentence[i] != ' ' && prevSpace == 1){
prevSpace = 0;
List[j] = &sentence[i];
printf("list[%d] now points to %c\n", j, sentence[i]);
j++;
}
if(sentence[i] != ' '){
prevSpace = 0;
}
if(sentence[i] == ' '){
/*if we find space and last char was not a space, add '\0'
if(prevSpace == 0){
printf("end added\n");
sentence[i] = '\0'; /**** <<<FOCUS ON THIS LINE! */
}
prevSpace = 1;
}
}
/*finish List with NULL*/
List[j] = NULL;
/*print out list of words*/
for(int i = 0; i < count; i++){
printf("List[%d] = %s\n", i, List[i]);
}
这段代码的问题是,它不是每个单词的数组列表,而是只有第一个单词,然后是许多空值。对于句子“test one two three”,输出为:
list[0] now points to t
List[0] = test
List[1] = (null)
List[2] = (null)
List[3] = (null)
如果我将那条重要的行改为line [i] ='X';
然后输出句子“测试一二三”是:
list[0] now points to t
list[1] now points to o
list[2] now points to t
list[3] now points to t
List[0] = testX oneX twoX three
List[1] = oneX twoX three
List[2] = twoX three
List[3] = three
但这很糟糕,因为我希望list [0]只有“test”,list [1]只有“one”,list [2]只有“two”,list [3]只有有“三”。我需要一种方法,以便我可以使用字符串'\ 0'的结尾。
答案 0 :(得分:1)
您的问题是,您试图将所有内容保留在string[]
内,而不是将内容复制到list[]
。您的for
循环存在问题,因为它会重新检查strlen[string]
,并且在您添加\0
后,您已缩短string
,因此循环将停止。
我不知道你是如何处理记忆的,但是最好有像
这样的东西char word[50][50] //choose the values to suit - 1st is max words,
// 2nd is max length of word
int i, j, k;
//new loop
for(i = 0, j=0,k=0; i < (strlen(sentence)); i++, k++)
{
word[j][k]=string[i];
if (word[j][k]=' ')
{
word[j][k]=0;
j++; k=0; // to move to next word
}
}
这段代码应该是将句子中的单词放入2D数组字[] []
所需的全部代码