C言語 単語の抽出

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Roy

C言語 単語の抽出

#1

投稿記事 by Roy » 8年前

ターミナルでテキストファイルから英単語を取り出すプログラムを作っています。記号などは無視し、アルファベットと数字の時のみ配列にしまうようにしています。

コード:

#include<stdio.h>
#include<string.h>
#include<ctype.h>

void GetWord(char *word){
  int  ch;
  int  cnt = 0;
  char word_buff[20] = {0};

  while(1){
    ch = getchar();
    if((isalnum(ch)) == 0)
      break;
    word_buff[cnt] = ch;
    cnt++;
  }

  strcpy(word,word_buff);

}

int main(){
  char word[20];

  for(int i = 0; i < 10; i++){
    GetWord(word);
    printf("%s\n", word);
    for(int j = 0; j < 20; j++)
      word[j] =	'\0';
  }

  return 0;
}
このコードだと記号などが二つ以上続くと謎の空白が入ってしまいます。以下が実行結果です。
[sp]はスペースのことです。

テキスト内容「test.[sp]te[sp]ttte[sp]000,000[sp][sp][sp][sp]hu[sp]ih」

[実行結果]
test

te
ttte
000
000



hu

原因が分かる方がいたら回答よろしくお願いします。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: C言語 単語の抽出

#2

投稿記事 by みけCAT » 8年前

その「謎の空白」は、0文字の単語が出力されているだけですね。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Roy

Re: C言語 単語の抽出

#3

投稿記事 by Roy » 8年前

回答ありがとうございます。その「0文字の単語」を無くすにはどうすればよいのでしょうか・・・?

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: C言語 単語の抽出

#4

投稿記事 by みけCAT » 8年前

読み込んだ単語が0文字のときは返さないようにするといいでしょう。
出力する単語の数を固定しているのもよくないので、そこも含めて修正してみました。
► スポイラーを表示
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Roy

Re: C言語 単語の抽出

#5

投稿記事 by Roy » 8年前

載せていただいたコードを試したところ、無事動作しました。ありがとうございました!

かずま

Re: C言語 単語の抽出

#6

投稿記事 by かずま » 8年前

Roy さんが書きました:載せていただいたコードを試したところ、無事動作しました。ありがとうございました!
このコードも試してみてください。

コード:

#include <stdio.h>
 
int main(void)
{
    char word[20];
 
    while (scanf("%*[^a-zA-Z0-9]"), scanf("%19[a-zA-Z0-9]", word) == 1)
        puts(word);
    return 0;
}

閉鎖

“C言語何でも質問掲示板” へ戻る