即时计数在一个文件中的字符数,但我想计数是单词的数目小于图5和6或更大(im counting th

2019-11-03 13:22发布

我想这样做:在同一时间读取该文件中的一个字。 (使用一个字符串来做到这一点)计算三两件事:单字符的话有多少是在该文件中,有多少短(2至5个字符)的话是在该文件中,有多少长(6个或更多字符)的话是在文件。 帮助在这里

IM在不知道如何阅读有关文件转换成字符串。 我知道我有这样的事情,但我不明白的休息。 帮助在这里

ifstream infile;
//char mystring[6];
//char mystring[20];

 int main()
    {
        infile.open("file.txt");
            if(infile.fail())
            {
                cout << " Error " << endl;
            }

        int numb_char=0;
        char letter;

                while(!infile.eof())
                {
                    infile.get(letter);
                    cout << letter;
                    numb_char++;
                    break;
                }

    cout << " the number of characters is :" << numb_char << endl;
    infile.close(); 
    return 0;

Answer 1:

我不太知道从哪里开始?

您的循环:

while(!infile.eof())
{
  infile.get(letter);
  cout << letter;
  numb_char++;
  break;
}

只会造成的额外执行一次break;

另外这个代码看起来是试图读取字符数在一个文件中,而不是计数是5个字母或大于6个字母的单词数。

尝试是这样的:

ifstream infile;

int main(){
  infile.open("file.txt");
  if(!infile.good()){
    cout << " Error " << endl;
    return 1;
  }
  int shortCount = 0;
  int mediumCount = 0;
  int longCount = 0;
  int charCount = 0;
  char letter;
  while(!infile.eof()){
    infile >> letter;
    if(letter == ' ' || char == EOF){ // end of word or file.
      if(charCount == 1)
        shortCount++;
      else if(charCount < 6)
        mediumCount++;
      else
        longCount++;
      charCount = 0;
    }else{
      charCount++;
    }
  }
  cout << "Short Words: " << shortCount << endl;
  cout << "Medium Words: " << mediumWords << endl;
  cout << "Long Words: " << longWords << endl;
  infile.close();
  return 0;
}


Answer 2:

可能是一个Unicode的问题,你可能要检查的文件的编码,如果是Unicode,你将需要使用适当的方法wfstream和类型wchar_t 。 Unicode的越来越普遍,我也不会感到惊讶,如果这是你的问题的根源。



Answer 3:

#include <cctype>
#include <string>
#include <vector>
#include <iostream>
using namespace std;

string s;
vector< int > word_length_histogram;

while ( cin >> s ) // attempt to get a word and stop loop upon failure
{
    while ( ispunct( * --s.end() ) ) s.erase( --s.end() ); // strip punctuation

    if ( s.size() >= word_length_histogram.size() ) {
        word_length_histogram.resize( s.size() + 1 );
    } // make sure there's room in the histogram

    ++ word_length_histogram[ s.size() ];
}

最后, word_length_histogram[1]为1个字符的单词的数量, word_length_histogram[2]有2个字符的话,数量等,添加了范围的内容中word_length_histogram得到你想要的具体统计数据。



Answer 4:

正如我所说...你正在读一个字符,然后你的循环的打破了...不break

至于如何做到这一点?一个办法是定义3个柜台, int fiveMinusLetterWordint sixPlusLetterWordint singleLetterWord 。 数字符,直到letter == ' ' 。 当你打的空间,看看你有多少个字符阅读 - 这是前一个单词的长度。 增量如果需要你一个计数器,重置您的字符计数器,并继续untl文件的末尾。 记住循环退出后要检查的最后一个字的长度。 你也将不得不因为你读一次一个字符处理结束行分隔符。

因为这方面的一个更简单的方法是C ++是使用istream& getline ( istream& is, string& str );<string>和读取一行行成std::string则使用std::string函数来找到你的话。

编辑:我错过了你的问题的一部分,说:“在某一时刻一个字读”。 看看对方的回答,您可以使用的std :: string从流中读取一个字。



Answer 5:

vector<string> words;
int cLength = 0;
long shortWords, medWords, longWords;

boost::algorithm::split(inputString, is_any_of(" .,-_=+;()[]\\/ [etc]"), words, token_compress_on);
for ( unsigned long i = 0; i < words.size(); i++ )
{
    cLength = words[i].size();
    if ( cLength < 2 ) // short word
    {
        shortWords++;
    } else if ( cLength < 6 ) {
        medWords++;
    } else {
        longWords++;
    }
}


文章来源: im counting the number of characters in a file but i want to count the number of words that are less than 5 and 6 or greater