【发布时间】:2018-04-11 02:32:07
【问题描述】:
我遇到了一个问题,当将指向句子中字符的指针存储到新数组中时,如果我在句子中添加一个 '\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]);
}
这段代码的问题是,数组列表没有每个单词,它只有第一个单词,然后是许多空值。对于“测试一二三”这句话,输出为:
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' 的结尾。
【问题讨论】: