如何使用strtok将包含空格的给定字符串拆分为多个字符串?

问题描述

我有一个名为email.txt的文件,其中包含一些文本。我试图将包含空格的给定字符串拆分为多个字符串。我编写的程序不会将单词分成多行。它给了我文件最后一个字的输出。 这是我的代码

#include <stdio.h>
#include <string.h>
#define MAXCHAR 1000
int main()
{
    FILE *fp2;    
    char str2[MAXCHAR];
    int line = 0;
    char delim[] = " ";
    int init_size = strlen(str2);
    fp2 = fopen("email.txt","r");
    while( fgets( str2,MAXCHAR,fp2 )) {
        line++;
        // printf(" %s",str2);  
    }
    char *ptr = strtok(str2,delim);
    
    while(ptr != NULL)
    {
        printf("%s\n",ptr);
        ptr = strtok(NULL,delim);
    }       
    
    return 0;
}

解决方法

循环浏览文件中的所有行,然后然后循环浏览strtok()返回。这意味着您只能标记最后行读取。

您需要嵌套这些循环-读取一行,标记化,然后读取下一行。

while( fgets( str2,MAXCHAR,fp2 )) {
    char * ptr;
    line++;
    //  printf(" %s",str2);
    ptr = strtok(str2,delim);

    while(ptr != NULL)
    {
        printf("%s\n",ptr);
        ptr = strtok(NULL,delim);
    }
}
,

您可以遍历所有字符,然后输出其中一个

  • 您刚刚阅读的字符或
  • 如果字符是空格,则换行符