c++程序来检查字母的频率

c++ program to check the frequencies of the letters

本文关键字:频率 检查 程序 c++      更新时间:2023-10-16

我正在编写一个c++程序来检查字母的频率。当输出没有像"0"这样的空间时;aabbbsssd";,我的代码可以准确地检查字母的频率。然而,如果输入具有类似于:;做bo;我的输出只是"d1";以及";o1";,没有"0"的频率;b";以及";e";。

更新代码:

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
struct Letters
{
  Letters() : freq(0){}
  Letters(char letter,int freq) {
    this->freq = freq;
    this->letter = letter;
}
char letter;
int freq;
};
bool Greater(const Letters& a, const Letters& b)
{
   if(a.freq == b.freq)
      return a.letter < b.letter;
   return a.freq > b.freq;
}
int main () {
cout<<"Enter text:" << endl;
string input;
getline(cin, input);
vector<Letters> count;
int letters[26]= {0};
for (int x = 0; x < input.length(); x++) {
    if (isalpha(input[x])) {
        int c = tolower(input[x] - 'a');
        letters[c]++;
    }
}
for (int x = 0; x < 26; x++) {
    if (letters[x] > 0) {
        char c = x + 'a';
        count.push_back(Letters(c, letters[x]));
    }
}
std::sort(count.begin(),count.end(),Greater);
cout<<"Frequencies:" << endl;
for (int x = 0 ; x < count.size(); x++) {
    cout<<count[x].letter <<  " " << count[x].freq<<"n";
  }

return 0;
}

如果写得不好,我们深表歉意,并提前感谢您的帮助!

cin >> text;将只读到第一个非空白字符之后的第一个空白字符。

您可以使用std::getline()读取一整行,如下所示:

getline(cin, text);

更新

假设测试你的程序的人也输入大写文本,你的程序应该是这样的:

#include <iostream>
#include <iomanip>
using namespace std;
int alpha[26] = {0};
int main(void)
{
    string text;
    cout << "Enter text:" << endl;
    getline(cin, text);
    for (int i = 0; i < text.length(); i++)
    {
        int a = text[i];
        if (a >= 'A' && a <= 'Z')
        {
            alpha[a - 'A']++;
        }
        else if (a >= 'a' && a <= 'z')
        {
            alpha[a - 'a']++;
        }
    }
    cout << "Frequencies:" << endl;
    for (int i = 0; i < 26; i++)
    {
        if (alpha[i])
        {
            cout << right << char('a' + i) << setw(2) << right << alpha[i] << endl;
        }
    }
    return 0;
}

好吧,cin只会读入空格分隔符,要读入整行,需要使用getline(cin,v);其中,v是要将输入放入其中的变量。