ファイルの読み込みで文字数、単語数、行数をカウントするのですが/~/
のコメント部分はカウントしないソース作成しているのですが、どのようにすればよろしいでしょうか?
実際にコメント部分も含めたコードは書けています。
途中までは出来ているのですが、出力結果はコメントもカウントしてしまいます。最終的にコメント含むとコメント含まずの両方を出力したいです。
よろしくお願い致します。コードも書いていただけると助かります
質問の詳細追加
test.textを読み込みます
this is a pen
/コメント1/
this is an apple
/コメント2/
・コメント含む
単語数(/コメント1/で1単語扱い) 10個 行数 4行 文字数 41文字
・コメント含まず
単語数 8個 行数 2行 文字数 23文字
単語は一つのカタマリで単語扱いにしています。
#include <stdio.h> #include <stdlib.h> #define TRUE 1 #define FALSE 0 int main(int argc, char *argv[]) { FILE *fp; /* 入力ファイル用ファイルポインタ */ int ch; /* 入力文字 */ int line=0; /*行数*/ int word=0; /*単語数*/ int character=0; /*文字数*/ int whitespace=TRUE;/*空白文字を読んでいる最中は真(単語を読んでいる間,偽)*/ char back; if(argc == 1) { fp=stdin; /*標準入力を入力ファイルとする*/ } else if(argc == 2) { /*指定したファイルを開く*/ if((fp=fopen(argv[1],"r"))== NULL) { fprintf(stderr,"%s:ファイルが開けませんでした%s\n", argv[0],argv[1]); exit(1); } } else { } /*EOF が現れるまで 1 文字ずつ読みとる*/ while((ch = getc(fp)) != EOF) { // printf("standerd back=%c ch=%c\n",back,ch); /* '/''*'の文字かどうか判定する*/ if(back=='/' && ch=='*') { /* '/''*'の場合はEOFまで1文字ずつ読み取る*/ while((ch = getc(fp)) != EOF) { //printf("innet back=%c ch=%c\n",back,ch); /*一文字ずつ読み取り'*''/'を読み取ったらループを抜ける*/ if(back=='*' && ch=='/') { break; } /*一文字前に読み取った文字を代入する*/ back=ch; } }else { back=ch; /*文字数を増やす*/ character++; /*改行なら行数を増やす*/ if(ch=='\n') { line++; } /*空白、改行、タブの場合は空白とする。*/ if(ch==' '||ch=='\n'||ch=='\t') { whitespace = TRUE; } /*空白の場合は単語を増やす*/ else if(whitespace) { whitespace = FALSE; /*単語数を増やす*/ word++; } } } printf("行数=%d 単語数=%d 文字数=%d\n", line, word, character); fclose(fp); exit(0); }
回答2件
あなたの回答
tips
プレビュー