我尝试使用
从文件中读取字符串while(fscanf(fd, "%s ", word) != EOF) {}
其中fd是文件,而word是我存储字符串的地方。 但是,这有效地使用空格作为分隔符。目前,如果我有一个文件读取"这个%是,4 str%ng"它会产生字符串"这个%","是,"," the4"和" str%ng"。我需要它"这个" "是" "所述" " STR" " NG&#34 ;.是否可以使用fscanf执行此操作,还是需要使用其他内容?
答案 0 :(得分:3)
这些答案显示了"%[]
格式说明符的使用。举个例子,假设你有这个从控制台获取两个字符串:
#include <stdio.h>
int main(void){
char s1[100] = "", s2[100] = "";
int res;
res = scanf("%99[^%]%%%99[^%]%%", s1, s2);
printf("%d %s %s\n", res, s1, s2);
}
第一个%
启动每个格式规范,^%
告诉scanf
停在%
,下一个&#34;转义&#34; double %
告诉scanf读取停止扫描的%
。然后重复第二个字符串,因此一个字符串的格式规范为%99[^%]%%
。
为了使格式看起来更简单,假设分隔符不是%
而是#
,那么代码将是:
#include <stdio.h>
int main(void){
char s1[100] = "", s2[100] = "";
int res;
res = scanf("%99[^#]#%99[^#]#", s1, s2);
printf("%d %s %s\n", res, s1, s2);
}
函数fscanf
类似。
这个答案没有处理&#34;未知&#34;分隔符,所以我修改了代码。
#include <stdio.h>
int main(void){
char s1[100] = "";
while(scanf("%99[^!£$%&*()_-+={};:'@#~,.<>/?0123456789]", s1) == 1) {
getchar(); // remove the delimiter
printf("%s\n", s1);
}
}
注意我没有将字符^
或"
或[
或]
作为分隔符。
答案 1 :(得分:1)
如果您没有特定的分隔符(似乎是您的情况),则需要手动解析每个文件行。您可以使用fgets()
读取每一行,然后手动解析(例如,忽略每个非字母字符)。
此致