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

时间:2012-07-20 06:52:15

标签: c parsing char

我有一个包含行的文本文件,每行包含不超过80个字符。每行包含(一个或多个单词)除以逗号或空格。我需要词典编纂这些词。我想将 scanf 与字符串符号“%s”一起使用,但它只考虑空格。所以我想我不能。任何更聪明的方法来处理解析单词比通过char获取char?

这是我计划做的草图:

   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);

        }
    }

1 个答案:

答案 0 :(得分:1)

假设你在一个合适的变量(line,下面)中有一整行,你可以使用类似的东西:

const char *ptr = line;
char token[80];

while(*ptr != '\0' && sscanf(ptr, "%79[^, ]", token) == 1)
{
  ptr += strlen(token);
  while(*ptr == ',' || *ptr == ' ')
    ++ptr;
}

这使用(在我看来是未充分利用的)字符组格式%[]来抓取字符,直到找到逗号或空格,然后跳过解析后的令牌以及后面的任何分隔符。