0

这是我的整个程序,我应该从名为 hw4pr11input.txt 的输入文件中计算单词中的平均字母数。我只编程了几个星期,所以我很感激简单的答案,我可以用我的少量知识来实现​​。我还不知道数组是什么,我正在做作业的那一章在文件 io.xml 中。

#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。在您的循环中,您只需查找它是否是有效单词。

请注意,这假定 char 是 255 位而不是 unicode。您可以相应地扩大您的位设置。

这使您可以非常快速地检查字符是否为单词字符,并允许您定义要包含的字符(例如,如果要求突然更改为包含“-”。

于 2012-09-19T00:01:54.887 回答
0

您可以通过将这些字符组存储在字符串中来美化此代码。然后你可以编写一个函数,它接受一个 char 和一个字符串,并检查 char 是否等于给定字符串中的任何 char。但这需要您学习如何使用数组,因为字符串 i C 是字符数组。

于 2012-09-19T00:03:07.587 回答