0

これが私のプログラム全体です。hw4pr11input.txt という入力ファイルから単語の平均文字数を計算することになっています。私はプログラミングを始めて数週間しか経っていないので、わずかな知識で実装できる簡単な回答をいただければ幸いです。私はまだ配列が何であるかを知りません。私が宿題をしている章は、ファイル io にあります。

#include <fstream>
#include <iostream>
#include <cstdlib>
using namespace std;

//function declaration 
void average_letters(ifstream& fin);
//Precondition: there is a input file with text ready to be read
//postcondition: Text from the input file is read then the average length of
//words is calculated and output to the screen

//start main program
int main()
{
ifstream fin;

         fin.open("hw4pr11input.txt");                                               //opening input file
         if (fin.fail())                                                            //checking for input file opening failure
         {
            cout << "Input file open fail";
            exit(1);                                                               //terminating program if check fails
         }
         cout << "File Open\n";
         average_letters(fin);                                                     //calling function to remove spaces
         system("pause");
         return 0;
}
                                                                                   //function definition, uses iostream and fstream
void average_letters(ifstream& fin)
{
char next, last_char = 0;
double letter_count = 0, word_count = 0;
double average = 0;
     while(!(fin.eof()))
     {
         fin.get(next);
         if(!(next == ' ' || next == ',' || next == '.' || next == '/'             
         || next =='(' || next == ')')) 
         {
                   letter_count++;                                                                    
         }

         else
         {   
             if((next == ' ' || next == ',' || next == '.' || next == '/'         
             || next =='(' || next == ')') && (last_char == ' ' || next == ','    
             || next == '.' || next == '/' || next =='(' || next == ')' ))

             {
                     continue;
             }
             else
             {
                     word_count++;
             }
         }
         last_char = next;                  //stores previous value of loop for comparison
     }
     average = letter_count/word_count;
     cout << "The average length of the words in the file is:" << " " <<average;
     cout << endl;
}

このプログラムは割り当てを達成するために機能すると思いますが、私の主な関心事は、それが文字か記号かをチェックする関数 average_letters の部分にあります。.txt ファイルを見て、このシンボル リストを選択しました。ここでのコピーと貼り付けが難しくなるため、コメントを削除しました。それにより、私のロジックが理解しにくくなっていることをお詫びします。

ご協力いただきありがとうございます。私に気楽に行ってください:)。

4

2 に答える 2

0

std::bitset<255>符号なし整数に変換された文字を使用して、単語文字である文字のみをtrueにプリセットして使用できます。ループでは、有効な単語かどうかを検索するだけです。

これは、文字がユニコードではなく255ビットであることを前提としていることに注意してください。それに応じてビットセットをアップサイズできます。

これにより、文字が単語文字であるかどうかを非常に迅速にチェックでき、含める文字を定義できます(たとえば、要件が突然変更されて「-」が含まれる場合)。

于 2012-09-19T00:01:54.887 に答える
0

これらの文字グループを文字列に格納することで、このコードを美しくすることができます。次に、char と文字列を受け取り、char が指定された文字列内の任意の char と等しいかどうかをチェックする関数を作成できます。ただし、文字列 i C は文字の配列であるため、配列の使用方法を学ぶ必要があります。

于 2012-09-19T00:03:07.587 に答える