• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C++ 文字数カウントについて。)

C++による文字数カウント方法とは?

このQ&Aのポイント
  • C++を使用してx.txtの文字数をカウントする方法を教えてください。
  • 大文字と小文字を区別してカウントし、母音の数、行数、文字数を求める方法を教えてください。
  • 条件としてwhileループを使用することが求められます。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

>答えでは、Number of characters: 34 になっていますが、 >そのプログラムでは Number of characters: 33 となってしまいます。文中の1を読んでいません。 文中の1を読んでいないと判断した材料はなんでしょうか? 例えば、"1" を"100" に変えたら結果はどう変わりますか? 私の推測では、おそらく、最後の行に(サンプルには)改行があるか(テストデータには)ないかのような気がします。

taro_yama
質問者

お礼

確かにそうです。1で有るという判断は根拠が無いです。 100に変えたら、35になりました・・・。 色々、勉強になりました。 BLUEPIXYさん、ありがとうございました!!

その他の回答 (2)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

#1補> >下記の方法だと、number of characters の if が数字を読んでいないようです。 ウチで試してみたところでは、テキストに数字が含まれていても大丈夫でしたけど・・ >yesを選択し、正確なfile name を入れても、if (! inFile)に行く おそらく、前回のinFile をclose していないせいではないでしょうか

taro_yama
質問者

補足

毎度、どうもありがとうございます!! サンプルinputに header line this is line 1 and the only line という2行の文が有ります。 答えでは、Number of characters: 34 になっていますが、 そのプログラムでは Number of characters: 33 となってしまいます。文中の1を読んでいません。 コンパイラはborlandです。 あと、ループの所ですが、最後の部分で cout << "do you want to run another input file (y/n)?: " << endl; cin >> y_n; outFile.close(); inFile.close(); } return 0; } と直したら、すんなり行きました!!

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

//1つの方法 #include <fstream> #define A 0 #define I 1 #define U 2 #define E 3 #define O 4 #define NL 5 #define OTHER 6 using namespace std; int main(){ ifstream Input("x.txt"); size_t all=0, count[7] = {0}; char c; while(Input.get(c)){ all++; switch(c){ case 'a': case 'A': count[A]++; break; case 'i': case 'I': count[I]++; break; case 'u': case 'U': count[U]++; break; case 'e': case 'E': count[E]++; break; case 'o': case 'O': count[O]++; break; case '\n': count[NL]++; break; default: count[OTHER]++; } } ofstream Output("y.txt"); Output << "母音の数、行数、文字数。\n\n"; Output << "a の個数: " << count[A] << endl; Output << "e の個数: " << count[E] << endl; Output << "i の個数: " << count[I] << endl; Output << "o の個数: " << count[O] << endl; Output << "u の個数: " << count[U] << endl; Output << "line の個数: " << count[NL] << endl; Output << "総文字数(全てのキャラクター): " << all - count[NL] << endl; return 0; }

taro_yama
質問者

補足

ありがとうございます!! 一応、組んでみました。下記の方法だと、number of characters の if が数字を読んでいないようです。(inputのtxtに数字が混ざっていた場合) あと、全体的な(一番大きい)whileのループが変な動作をします。yesを選択し、正確なfile name を入れても、if (! inFile)に行くようです。何か改良方法は有りますか?(これらが直れば、意図通りです) #include <iostream> // for endl #include <string> // for string #include <iomanip> // for setw #include <fstream> // for ifstream, ofstream using namespace std; int main() { ifstream inFile; // input file stream ofstream outFile; // output file stream string outputFile; // for output file name string inputFile; // for input file name string y_n; // for yes or no double na, ne, ni, no, nu, L, n; // main numbers in "while" char a, c; y_n = "y"; // yes or no while (y_n == "y") // if yes, loop this program. { // if no, go to EOF. cout << endl; cout << "Enter the name of the input file: "; cin >> inputFile; cout << endl << inputFile << endl; inFile.open(inputFile.c_str()); // open the input file if (! inFile) // open file error { cout << "Error opening input file named: " << inputFile << endl; cout << "Terminating program now..." << endl << endl; exit(1); } cout << "Enter the name of the output file: "; cin >> outputFile; cout << endl << outputFile << endl; outFile.open(outputFile.c_str()); // open the output file inFile.ignore(200,'\n'); // ignore the 1st line na = 0; // initial number of a and A ne = 0; // initial number of e and E ni = 0; // initial number of i and I no = 0; // initial number of o and O nu = 0; // initial number of u and U L = 0; // initial number of line n = 1; // initial number of characters inFile.get(a); while (inFile.get(c)) // loop for counting the number { if(c=='a' || c=='A') // for a and A (vowels) { na++; } if(c=='e' || c=='E') // for e and E (vowels) { ne++; } if(c=='i' || c=='I') // for i and I (vowels) { ni++; } if(c=='o' || c=='O') // for o and O (vowels) { no++; } if(c=='u' || c=='U') // for u and U (vowels) { nu++; } if(c=='\n') // for line (without 1st line) { L++; } if(c==c) // for characters { n++; } } // end of loop for counting the number // output numbers to file outFile << "The input file contained the following" << endl; outFile << "number of vowels, characters and lines:" << endl; outFile << "----------------------------------------" << endl; outFile << left << setw(25) << "Number of a's:" << na << endl; outFile << left << setw(25) << "Number of e's:" << ne << endl; outFile << left << setw(25) << "Number of i's:" << ni << endl; outFile << left << setw(25) << "Number of o's:" << no << endl; outFile << left << setw(25) << "Number of u's:" << nu << endl; outFile << left << setw(25) << "Number of lines:" << L << endl; outFile << left << setw(25) << "Number of characters" << n << endl; cout << "do you want to run another input file (y/n)?: " << endl; cin >> y_n; // if yes, loop this program again. } // if no, go to EOF. outFile.close(); // close the output file inFile.close(); // close the input file return 0; }

関連するQ&A