我有一项任务,我需要计算文件中的行,单词和字符。我在计算正确数量的字符和单词时遇到了问题,因为如果空格加倍,它就像一个字符和一个单词。
输出应为
示例
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;
}
答案 0 :(得分:1)
我认为OP提出这个问题的目的是找出他/她的代码无效的原因,因此我将以这种观点回答。
计算正确数量的单词
如果它的空间加倍,它就像一个字符和一个单词。
您可以使用布尔测试来解决此问题,如果遇到空格,请启用布尔值,如果下一个字符也是空格,则跳过。
我想你的字符数不计入标点符号?所以检查<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="visible" type="id"/>
<item name="masked" type="id"/>
</resources>
。如果您的作业也将标点符号计为字符数,请忽略此点。
以下是根据您的代码修改的正确版本代码。
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();
}