C ++程序需要行字和字符数

时间:2017-02-06 23:46:49

标签: c++

我有一项任务,我需要计算文件中的行,单词和字符。我在计算正确数量的字符和单词时遇到了问题,因为如果空格加倍,它就像一个字符和一个单词。

输出应为

示例

lines  words  characters  filename

 3     5        29        testfile

代码:

#include <iostream>
#include <fstream>
#include <string>
#include <cstring>
#include <iomanip>
using namespace std;

int main(int argc, const char * argv[]) {
string lines, words, chars, file1, file2;

ifstream infile;
ofstream outfile;
char c;

int countLines = 0;
int countChars = 0;
int countWords = 0;
cout<< "Enter the file name" << endl;
cin >> file1;
infile.open(file1.c_str());


while(!infile.eof())
{
    if(infile.peek() == 1)
        break;
    c = infile.get();
    if(c != '\n')
       countChars++;
    else
        countLines++;

    if(c == ' '|| c =='\n')
        countWords++;

}

  //  countChars = countChars - countWords;



cout << setw(12) << countLines << setw(12) << countWords << setw(12) << countChars  << endl;

infile.close();



return 0;
}

2 个答案:

答案 0 :(得分:1)

我认为OP提出这个问题的目的是找出他/她的代码无效的原因,因此我将以这种观点回答

  

计算正确数量的单词

  1. C ++将EOF(文件末尾)定义为-1,因此也包括对EOF的检查,否则您将错过字数。
  2.   

    如果它的空间加倍,它就像一个字符和一个单词。

    1. 您可以使用布尔测试来解决此问题,如果遇到空格,请启用布尔值,如果下一个字符也是空格,则跳过。

    2. 我想你的字符数不计入标点符号?所以检查<?xml version="1.0" encoding="utf-8"?> <resources> <item name="visible" type="id"/> <item name="masked" type="id"/> </resources> 。如果您的作业也将标点符号计为字符数,请忽略此点。

    3. 以下是根据您的代码修改的正确版本代码。

      c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z'

答案 1 :(得分:0)

使用getline逐行读取文件

while(getline(file,str))
{
    countLines++;
    countChars += str.length();
    countWords += CountWords(str);
 }

哪个文件是iofstream对象,str是字符串。为了计算单词数量( CountWords ),您有several ways。其中之一是:

#include <vector>
#include <string>
#include <boost/algorithm/string/split.hpp>

int countWords(std::string str) {
  vector< std::string > result;
  boost::algorithm::split_regex(result, str, regex( "\\s+" ));
  return result.size();
}