c++程序来检查字母的频率
c++ program to check the frequencies of the letters
我正在编写一个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是要将输入放入其中的变量。
相关文章:
- valgrind-hellgrind与泄漏检查的结果不同
- C++模板来检查友元函数的存在
- 检查输入是否不是整数或数字
- 试图让变量检查数组中的某些内容
- 芬威克树(BIT).找到具有给定累积频率的最小索引,单位为 O(logN)
- 在指针的帮助下,文本文件中单词的频率
- 检查值是否在集合p1和p2中,但不在p3中
- C++概念:如何使用'concept'检查模板化结构的属性?
- 概念TS检查忽略私有访问修饰符
- 检查 std::shared_ptr<> 的当前底层类型是否为 T
- 在c++中检查长方体是否尽可能快地重叠(无迭代)
- 如何在C++中检查2D数组中负值的输入验证
- C++:正在检查LinkedList中的回文-递归方法-错误
- 使用for循环检查数组中的重复项
- 如何检查一个c++字符串中有多少相同的字符/数字
- 检查不带转换的扫描格式
- 如何检查线程是否锁定
- 检查数组值连续出现的频率
- OpenGL窗口应用程序检查事件更新的频率
- c++程序来检查字母的频率