c++ - 计算字符串中所有字符的函数 - C++

标签 c++

我想用 C++ 写一个函数,它计算一个字符串中的所有字符。# 我有一个名为 input 的字符串,程序的用户可以在其中输入一个句子, 我将重要的字母存储在这样的字符串字母表中:

string alphabet {"ABCDEFGHIJKLMNOPQRSTUVWXYZ"};

和一个用于存储字母出现频率的 vector ,例如A 位于位置 0,B 位于位置 0,依此类推。

vector<long> letterCount (26);

我已经按照我认为它应该工作的方式编写了这个函数,它似乎能够计算出字符的出现,但之后这个数字乘以字母在字母表中的位置。这是函数:

long countLetters(int& p) {
  for(int i = 0; i < alphabet.size(); ++i) {
      for(long j = 0; j < count(input.begin(), input.end(), alphabet.at(i)) {
          countLetters.at(i)++;
      }
  }
return letterCount.at(p);
}

例如,如果输入是“HELLO”,程序输出:

E : 5
H : 8
L : 24
O : 15

所以你看,例如字母“L”在字符串中包含两次,但“L”的结果是 24,因为“L”在字母表中的位置为 12。

如果你知道我的问题是什么,请帮忙。

编辑:我找到了一种至少部分有效的方法:

long countLetters(int& p) {
   for(size_t i = 0; i < input.length(); ++i) {
      for(size_t j = 0; j < alphabet.length(); ++j) {
        letterCount.at(j) = count(input.begin(), input.end(), alphabet.at(j));
      }
   }
   return letterCount.at(p);
 }

但是当输入两个或更多单词时,该函数只计算第一个单词中出现的字母。如何分析更多的词?

编辑:在我有 cin >> input 之前,但是 getline(cin, input); 是正确的。

最佳答案

你在做某种奇怪的双循环。相反,在单个循环中遍历字符串并将其计入正确的组中:

for (int i = 0; i < input.length(); i++) {
    char c = input[i];
    if (c < 'A' || c > 'Z') continue;
    countLetters[c-'A'] += 1;
}

关于c++ - 计算字符串中所有字符的函数 - C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17628657/

相关文章:

C++ 可变参数模板在虚拟抽象的外部未解析

c++ - 如何在 Mac 上创建 C++ 窗口?

c++ - delete[] 如何知道 C++ 中的数组长度?

c++ - 优先队列堆实现

c++ - 安装 Stan for R 和使用 Rcpp 时编译出错

c++ - 用一些信息注释 C++ 二进制文件

c++ - 与标准库名称冲突

c++ - memcpy() 给我段错误

c++ - 在 Irrlicht 中移动和旋转 SceneNode(Sphere)

c++ - 共享资源的最快多读取器/单个写入器保护 - C++