2017-06-12 18 views
0

では、私は言葉をスキャンプログラムを書いているテキストファイルから読むスペースを無視して、ファイルから単語や」。、()C

どのように私はスペースまたは数字で始まる単語のみをスキャンすることができますし、

私はそのように私は、関数scanf関数を使用することができます知っているが、かなりそれを使用する方法を取得していない私の文字列

',.()\t\nを取ることなくスペース

で終わる別の小さな疑問

私のテキストに何本あるのかを数えたいと思っています だから、私のカウントを増やすために "\ n"記号を探すべきでしょうか?

+0

xgetsのアドバイスとして 'fgets'を読むと、簡単に行を数えることができます。 –

+0

ファイルが ''\ n' 'で終わっていない場合、例には' 'abc" 'しかありません。それはあなたのアプリケーションのための0行のファイルか1行のファイルでしょうか? – chux

+0

"私は単語をスキャンするプログラムを書いています" - ポストコードではなくコードについて話すポストは、ダウン投票を引きつけます。コードの投稿を提案する。 – chux

答えて

2

まず第一に、あなたはいくつかのルールに従う必要がある質問をするとき、ここでスタックオーバーフローに質問をする方法のためのようである:

How to askスタックオーバーフローヘルプセンターから

を私がいた場合は、この仕事をしていますが、charを使ってcharを読むと、 'while loop'がEOFで終了し、文字列にこのcharを追加してreallocを使って追加するかどうかを 'if'チェックで確認します。

2番目の質問では、最初の文字の前に、char ==を '\ n'に、そうであれば++を、行数を数えるintにチェックします。

終わりに、それは次のようになります。

int *input = malloc(sizeof(int)); 
int linesLength = 0; 
int now; 
int lines = 0; 
whlie ((now = getc(file)) != EOF){ 
    if (now == '\n') { 
     lines += 1; 
    } 
    if (/* what chars you want out */){ 
     /* add your char using realloc */ 
     linesLength += 1; 
    } 
} 

をところでこれは私が今月に18まで行う必要がまったく同じ作業であり、あなたの名前はおなじみに見えますが、ポイントは、これがないです宿題の場所は、次回に注意してください。

+0

'fgets()'と 'realloc()'という脳の損傷したアイデアを文字ベースでドロップします。 – 0andriy

+1

なぜ脳は@ 0andriyに傷ついたのですか?最初はこれが失礼です。二番目に、fgets()を使うべきだと思うなら、答えを投稿してください。 – Yonlif

+0

私は少しあなたのコードで混乱しています。私は 'input'で何もしませんが、この行は間違っています:' int * input = malloc(sizeof(int *)); '。これは、 'int * input = malloc(sizeof(int));'または 'int * input = malloc(sizeof * input);です。ここで 'char'を使うつもりなら、2番目のバージョンではタイプを変更するだけです。また、ストレージバッファに追加されるすべての文字に対して 'realloc()'を実行することは非常に非効率的です。必要に応じて、適度なサイズに定期的に再割り当てし、必要に応じて最後に最終サイズにトリムする方がよい。 –

関連する問題