c - 解析文本文件中由逗号或空格分隔的单词 - 我可以用 scanf 克服逗号吗?

标签 c parsing char

我有一个包含行的文本文件,每行包含不超过 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/

相关文章:

c - 这是创建 C 函数的正确方法,没有返回语句,打开、写入、关闭文件吗?

visual studio 2017 中的 C 语言支持

c - __attribute__((section ("name"))) 用法?

c - 用于开发最新的 Linux 上游(内核、Gnome 等)软件包的良好 Linux 发行版(和方法)是什么?

java - 无法显示Json数据

C++ boost date_input_facet 似乎使用传递给 facet 构造函数的不正确格式意外地解析日期

javascript - 如何在 JavaScript 中解析 excel 文件?

c - 使用 C 将 char 添加到字符串文字

c# - 检测*所有*表情符号

c - 控制语句 'if((i+j) & 1)' 背后的逻辑是什么?