如何在从文件中读取时跳过字符串中的空格

时间:2014-03-17 15:02:12

标签: c file-io

我想从文件中读取20个字符串,这些字符串可能包含或不包含空格。这些字符串在文件的连续行中。我想从不包含空格的行创建一个字符数组。怎么做?

例如:

aaa bbbbccc 
abcedefghij

等等。

我想创建一个包含这些元素的char数组{a,a,a,b,b,b,b,c,c,c} 另一个{a,b,c,d,e,f,g,h,i,j}

的数组

我可以使用sscanf吗?

4 个答案:

答案 0 :(得分:2)

最简单(可能不是禁食)的方式是使用fgetc()来阅读字符。

读完一个角色后,检查它并跳过你不想要的每种角色。

要使用isspace()检测所有类型的空格,要检测空白,请仅使用isblank()

开始将所需的字符复制到新分配的char - 数组(“字符串”)中,以读取每个新行。

答案 1 :(得分:1)

我假设“bbbbccc”和“abcedefghij”之间存在换行符,或者你怎么知道两个char数组之间的区别呢?

然后我看到你有两个基本选项。

1)使用getchar()通过char读取char。跳过空格,在点击'\ n'时开始一个新字符串。
2)使用fgets(),读取一行。手动将这些字符串复制到另一个字符串中,在此过程中跳过空格。

选项1)的优点是您只能浏览一次数据。

答案 2 :(得分:1)

#include <stdio.h>

int main(){
    FILE *fp;
    char elements[10];
    char other[10];
    char *p = elements;
    char ch;
    int count = 0;

    fp=fopen("data.txt", "r");

    while(1==fscanf(fp, " %c", &ch)){
        p[count++] = ch;
        if(count == 10){
            p = other;
            count = 0;
        }
    }
    fclose(fp);
    {//check
        int i;
        for(i = 0; i<10; ++i){
            printf("%c", elements[i]);
            putchar(i < 9 ? ',' : '\n');
        }
        for(i = 0; i<10; ++i){
            printf("%c", other[i]);
            putchar(i < 9 ? ',' : '\n');
        }
    }
    return 0;
}

答案 3 :(得分:0)

您最好的选择是使用fgets()

要回答您的问题:是的,您可以在sscanf()之后使用fgets()! 但是我会遍历整个输入char-by-char并构建一个没有空格的新字符串。