我有一个包含行的文本文件,每行包含不超过 80 个字符。每行包含(一个或多个单词),并用逗号或空格分隔。我需要词典对单词进行排序。我想将 scanf 与字符串的符号“%s”一起使用,但它只考虑空格。所以我想我不能。有什么比逐个字符地获取字符更聪明的方法来处理单词解析?
这是我计划做的事情的草图:
char**arr;
arr=calloc(Size, sizeof(char)*80);
int m=0;
while (!feof(file)) {
char c=fgetc(file);
while (c!='/n') {
j=0;
char* current;
current=calloc(1,sizeof(char)*80);
while (c!=','&& c!=' ' && c!='/n') {
current[j]=c;
j++;
c=fgetc(c);
}
current[j]='\0';
arr[m]=current;
free(current);
}
}
最佳答案
假设您在合适的变量中有整行(line
,如下),您可以使用如下内容:
const char *ptr = line;
char token[80];
while(*ptr != '\0' && sscanf(ptr, "%79[^, ]", token) == 1)
{
ptr += strlen(token);
while(*ptr == ',' || *ptr == ' ')
++ptr;
}
这使用(在我看来,未充分利用的)字符组格式 %[]
来抓取字符,直到找到逗号或空格,然后跳过已解析的标记和任何分隔符接下来。
关于c - 解析文本文件中由逗号或空格分隔的单词 - 我可以用 scanf 克服逗号吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11574252/