用空格分隔字符串并将其存储在指针数组中

时间:2018-09-28 04:51:56

标签: c

我的程序接收一个字符串,然后根据空格将字符串分成多个单词,然后将这些单词存储在一个指针数组中。但是由于某种原因,它没有将单词分成适当的索引。在此示例中,文本“ 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;

}

1 个答案:

答案 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>