我的程序接收一个字符串,然后根据空格将字符串分成多个单词,然后将这些单词存储在一个指针数组中。但是由于某种原因,它没有将单词分成适当的索引。在此示例中,文本“ suspend 0”下的图片令牌1应该对应于0,但是对应于“ end”
int main(){
int ch ,n= 1;
int i = 0;
char str[512], *token[5], *act_token;
while(1){
printf("Enter text: ");
while((ch = getchar()) != '\n')
str[i++] = ch;
str[i] = '\0';
i = 0;
printf("string: %s\n", str);
int spaces = 0;
for(int counter = 0; counter < strlen(str) + 1; counter++){
if(str[counter] == ' '){
spaces++;
}
}
printf("Spaces: %d\n", spaces);
strtok(str, " ");
while(n <= spaces && (act_token = strtok(NULL, " "))){
token[n] = act_token;
n++;
}
token[n] = NULL;
// printf("token[1]: %s\n", token[1]);
for(int x = 1; x < spaces+1; x++){
printf("token[%d]: %s\n", x, token[x]);
}
}
return 0;
}
答案 0 :(得分:1)
在此示例中,文本“ suspend 0”下方的图片,token1应该对应于0,但是对应于“ end”
那是因为(很可能)您的索引n
(由于某种原因在while
循环之外被初始化为1(为什么不是0?)却没有在每个{ {1}}循环迭代...
尝试一下:
while
注意1 :如果您在 while(n <= spaces && (act_token = strtok(NULL, " "))){
token[n] = act_token;
n++;
}
token[n] = NULL;
n = 1; <-- *** add this line ***
// printf("token[1]: %s\n", token[1]);
for(int x = 1; x < spaces+1; x++){
printf("token[%d]: %s\n", x, token[x]);
}
内的输入过程中检查了每个字符,则可以消除所有这些搜索循环。无论如何,您都是按char收集输入的char,因此请检查它的值并计算空格+拆分单词。
NOTE2 :您正在创建固定大小的数组(为此,最好使用while((ch = getchar()) != '\n')
s),但是您切勿检查输入是否不超过这些数组的限制。 / p>