2017-10-09 35 views
0

试图编写一个函数,用于分析输入文件并输出不同字符,每个单词的平均长度以及总字数等信息。我无法弄清楚如何跟踪字符串中的不同字符。作为一个例子:如何跟踪不同的字符和单词?

成为或不是,这是问题。

应该返回总共10个单词,12个不同的字符和3.2个平均字长。

这是我的代码至今:

void fileInfo(const string& fileName) 
{ 
    ifstream in(fileName); 
    if (in.fail()) 
    { 
      cout << "Error, bad input file."; 
    } 

    string line = ""; 
    int wordTotal = 0; 
    while (getline(in, line)) 
    { 
      istringstream ss(line); 
      string word = ""; 
      while (ss >> word) 
      { 
       wordTotal++; 
       for (size_t i = 0, len = word.size(); i < len; i++) 
       { 
        if (word.at(i)) 
       } 
      } 
    { 






} 
+0

由于'std :: set'不存储重复项,因此可以使用'std :: set '并将单词中的每个字符插入到集合中。 – PaulMcKenzie

回答

0

一种解决方案是使用std::unordered_set<char>存储每个单词的字母。由于unordered_set不存储重复项,因此最终得到一组不同的字母。

其次,你只想计算字母字符,而不是标点符号或数字,然后在一组中进行计算。因此,您需要筛选每个字符以确保它是字母。

void fileInfo(const string& fileName) 
{ 
    std::unordered_set<char> cSet; 
    //... 
    while (ss >> word) 
    { 
     wordTotal++; 
     for (auto v : word) 
     { 
      if (std::isalpha(v)) 
       cSet.insert(std::tolower(v)); 
     } 
    }  
    //... 
} 

Live Example

这个词是只插入集,如果它是字母。另请注意,插入的字母是小写字母。

相关问题