お世話になっております(初心者です)。
現在指定した文字の文字数をカウントするアプリケーションを自作しているのですが、行き詰ってしまったのでご教授を頂けないでしょうか。
使用言語はC/C++で、コンパイラはgccです。
----------以下ソース
intdata_read( HWND hwnd,char *f_name )
{
inti;
FILE*fpr;
fpr=fopen(f_name,"r");
if( fpr == NULL ){
MessageBox(hwnd,"データ読み込みエラーです","データ読み込みエラー",MB_OKCANCEL);
return(-1);
}
i=0;
while( fgets(g_str02[i],W_MAX,fpr) != NULL){
i++;
}
fclose(fpr);
return(i);
}
int cou_e(HWND hwnd){
inti;
intj,k;
intl;
l = data_read( hwnd,"c:\\result.txt" );
for(j=0;j<=l;j++){
for(k=0;g_str02[j][k] = '\n';k++){
if( g_str02[j][k] == 'e' ){
i++;
}
}
}
g_cou_e = i;
return(0);
}
----------ソースここまで
※必要なヘッダファイルはインクルード済
※g_str02[j][k]はグローバルで宣言した関数(char型)。
※g_cou_eはグローバルで宣言した関数で、指定したテキストファイルの'e'の数が格納される関数(int型)。
※c:\result.txtは文字数をカウントしたいテキストファイル。
このg_cou_eを他の関数で呼び出して使用したいのですが、今のところ実際にはテキストファイルに'e'は数個しか存在していないのにも関わらず、膨大な数値が表示されてしまったりしています。
ちなみに、コンパイラ自体は成功します。
どうぞ忌憚の無い意見をよろしくお願い致します。
A 回答 (8件)
- 最新から表示
- 回答順に表示
No.8
- 回答日時:
初心者とのことなので、色々落とし穴にハマるのも
勉強になって良いと思います。
私が作るのだったら...
ファイル入出力は色々トラップが仕掛けられていて
怖いので"専門家"に任せます。(笑)
専門家といっても他人に丸投げするということでは
ありません。ライブラリを使います。
gccでは私が勧めるのはPocoです。
"ファイル ストリーム", "例外"
これでかなりすっきりしたプログラムになり
驚くと思います。
(Poco以外にも同じ機能をもつライブラリは多数あります)
"車輪の再発明を行わない"
こともプログラミングでは重要なことです。
(特に職業プログラマなど、スキル・アップを考えている場合)
ぜひ挑戦してください!!!
あと、"単語"の定義はどうしていますか?
たとえば
"私は プログラマです"
という文の場合、
言語学的には
"私" "は" "プログラマ" "です"
の4つです。この定義に忠実に分析すると
構文木など高度な知識が必要です。
(”ワタシハプログラマデス”を分析する場合を考えてください。
名詞、助詞、動詞など日本語の文法チェッカーを実装する必要があります)
もっと単純に
"私は" "プログラマです"
の2つとする場合もあります。
これは厳密には単語ではなく、(空白で区切られた)トークンと呼ばれます。
英語などの場合、トークン分割 ≒ 単語分割
ととらえられているようです。
トークン分割でしたらその名もズバリ
strtok (ストリング・トークン 自己流の呼び方です)
が非常に便利で、私も愛用しています。
No.7
- 回答日時:
>for(j=0;j<=l;j++){
だれか「g_str02には、g_str02[0]~g_str02[l - 1]まで文字列が入ってて、g_str02[l]には文字列が入ってない」って指摘してやれよ。
>for(k=0;g_str02[j][k] = '\n';k++){
も1つ、だれか「fgetsは、常に'\n'まで読むとは限らないので、読み込んだ文字列に'\n'が入っていない事もある。文字列の最後に確実に入っていると言えるのは'\0'だけだ」って指摘してやれよ。
No.6
- 回答日時:
>for(k=0;g_str02[j][k] = '\n';k++){
誰か「g_str02[j][k] = '\n'」は「比較しないで代入してる」って指摘してやれよ。
No.5
- 回答日時:
変数の初期化をしないで使っているからでは?
cou_eの中で 変数iは初期かもされずに i++などのカウントアップを行っています
したがって 変数iの内容は実行時にどのような値になっているのかわかりません
jのforループの前で
i=0;
などの初期化を行いましょう
また文字配列 g_str02の終端を '\n'で見ているようですが
これも少々危険なように思います
strlenなどや もともとの変数定義の長さ未満といった判定にした方がよさそうですが ・・・
No.3
- 回答日時:
>単語数をカウントするアプリケーションを作りたい
>指定した文字の文字数をカウントするアプリケーションを自作している
やりたいことは明確ですか?
単語数と文字数とは異なります。
No.2
- 回答日時:
勘違いだったらご免なさい。
補足してください。
for(k=0;g_str02[j][k] = '\n';k++){
のfor文はどういう動きをして欲しいの?
最初に変数iには何が入っていると思っている?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- Visual Basic(VBA) Vba LongPtrについて教えてください 2 2022/08/19 11:14
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBSでテキストファイルの2行目...
-
既存のテキストファイルを開く方法
-
ATTファイルってどうやって開け...
-
テキストファイルの一部分を抽...
-
WORDのVBAで差し込み印刷時、デ...
-
テキストファイルをiCalendar形...
-
C言語のファイル処理
-
テキストデータ変換(プログラ...
-
テキストファイルを読み込んで...
-
Excel VBAが徐々に遅くなる
-
c言語での単語数のカウント
-
文字コードの変換(JISコードへ)
-
STM32 Nucleo-F446REでデータを...
-
ストリームについて。
-
コーディングについて。
-
テキストファイルの監視
-
バイナリファイルの書き出し
-
単語数をカウントするアプリケ...
-
PerlでHTMLを作成する事は可能...
-
テキストファイルを検索・編集...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ATTファイルってどうやって開け...
-
Excel VBAが徐々に遅くなる
-
テキストファイルの一部分を抽...
-
既存のテキストファイルを開く方法
-
テキストファイルの特定行の削...
-
StreamReaderで読み込んだファ...
-
VBA。開いているテキストファイ...
-
VB(VBA)で、バイナリデータを使...
-
Windowsのメモ帳でUTF-8を選択...
-
テキストファイル固定長データ...
-
バイナリデータの中からMidのよ...
-
テキストファイルをSQLServerデ...
-
ファイル変換
-
テキストファイル内容の、16進...
-
パイソンでのテキストデータの...
-
[VB.NET] 処理の高速化を行いた...
-
RGBデータからBMP画像へ
-
C言語でテキストファイルをバイ...
-
エクセルVBAでメールの自動作成...
-
TXTファイルデーターをEX...
おすすめ情報