5

テキスト ファイルを開いていますが、アルファベットの単語だけを読みたいと思っています。たとえば、「He​​llo-World Hey」というテキスト ファイルがあるとします。「Hello」、「World」、「Hey」という言葉を読みたいです。

問題は、この出力の「フォーマット指定子」がどうあるべきかわからないことです。無数の組み合わせを試しましたが、期待どおりに機能するものはありませんでした。

FILE *fpin; 
char str[50];

while (fscanf(fpin, "%s[a-zA-Z]", str) != EOF) {
    // do something with str
}

どんな助けでも大歓迎です!ありがとう。

4

2 に答える 2

8

あなたはもうすぐそこにいます。スキャン セットを使用する必要がありますが、スキャン セットにもs変換がありません。

while (fscanf(fpin, "%49[a-zA-Z]", str) == 1) {

49 はバッファ オーバーフローを防ぎます (もちろん、配列の次元よりも 1 つ小さくする必要があります)。

もちろん、これは最初の単語で機能します。次に、次の単語を読む前に単語以外の文字をスキップする必要があるため、次のようになる可能性があります。

while (fscanf(fpin, "%49[a-zA-Z]", str) == 1)
{
    ...do something with word in str...
    if (fscanf(fpin, "%49[^a-zA-Z]", str) != 1)
        ...decide what to do...
        ...but remember one problem might be that the 'word' was too long...
}
于 2013-04-14T00:16:58.660 に答える
2

私は自分でプログラミングをするのはかなり初めてですが、これがあなたが探しているものかもしれません。それが役に立てば幸い。

#include <ctype.h>

int i = 0;
FILE *fpin; 
char c, str[50];

while ((c = fgetc(fpin)) != EOF)
{
    if(isalpha(c))
        str[i++] = c;

}
str[i] = '\0';
// do something with str
于 2013-04-14T00:08:43.137 に答える