【发布时间】:2016-07-24 00:20:03
【问题描述】:
我正在编写一个 C++ 程序来检查字母的频率。当输出没有像“aabbbsssd”这样的空格时,我的代码可以准确地检查字母的频率。但是,如果输入有空格,例如:“do be do bo”。我的输出只是 “d 1”和“o 1”,没有“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;
}
如果写得不好,请见谅,提前感谢您的帮助!
【问题讨论】:
-
您在使用调试器检查代码时发现了什么?
-
以前的
if声明if(a >'a' && a<='z')似乎没有害处,但似乎没有用。 -
不仅如此,
a - 'a'还假定字母是连续的(即在'a'和'z'之间没有其他字符)。这适用于某些字符集(例如 ASCII),但不适用于其他字符集。 -
确定没有大写输入吗?
标签: c++