0

行を含むテキストファイルがあり、すべての行に含まれる文字数は80文字以下です。すべての行には、コンマまたはスペースで分割された(1つ以上の単語)が含まれます。辞書編集で単語を並べ替える必要があります。文字列の記号「%s」でscanfを使用したいのですが、スペースのみが考慮されます。だから私はできないと思います。文字ごとに文字を取得するよりも、単語の構文解析を処理するためのよりスマートな方法はありますか?

これが私がやろうとしていたことのスケッチです:

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

        }
    }
4

1 に答える 1

1

適切な変数(line以下)に行全体があると仮定すると、次のようなものを使用できます。

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

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

これは、(私の意見では、かなり十分に活用されていない)文字グループ形式を使用%[]して、コンマまたはスペースが見つかるまで文字を取得し、解析されたトークンとそれに続く区切り文字をスキップします。

于 2012-07-20T07:47:52.047 に答える