我想从文件中读取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
吗?
答案 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并构建一个没有空格的新字符串。