我正试图找到一种方法来显示字符串中的所有字符及其出现的次数。
这是我到目前为止所拥有的:
fp
然后我返回:
输入一个句子
你好
h:1
e:1
l:2
l:2
o:1
所以我有点东西,但是我不知道如何使字母不重复一次。我知道我需要将它们存储在一个数组中,但这已经超出了我的范围。
答案 0 :(得分:1)
您非常亲密,不错的尝试!我喜欢使用counters
数组的方法,其中每个单元格都代表给定字符串中字母的频率。
因此,只需更新此数组即可,因为此答案表示How to get character's position in alphabet in C language?,而没有在那里提到的加号,因为您想要数组中字母的索引。换句话说,对于“ a”,您需要0,“ b”,您需要1,依此类推。
然后,在印刷阶段,以相反的方式使用上面链接的建议。当您打印counters
的第i个非零元素时,请打印该元素的第i个元素,这将显示有问题的字母。
将所有内容放在一起,您将得到:
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <cmath>
#include <string>
using namespace std;
int main()
{
string st = "";
cout << "Input a sentence: " << endl;
getline(cin, st);
int index = 0;
int index2 = 0;
int counters[26] = {0};
for(size_t i = 0; i < st.length(); i++)
{
int counter = 0;
index = st.find(st[i],0);
for(size_t j = 0; j < st.length(); j++)
{
index2 = st.find(st[j]);
if(index == index2)
{
counter++;
}
}
counters[st[i] - 'a'] = counter; // update 'counters' array
}
for(int i = 0; i < 26; ++i)
if(counters[i] != 0) // print non-zero counters
cout << (char)(i + 'a') << ": " << counters[i] << endl;
return 0;
}
输出:
e: 1
h: 1
l: 2
o: 1
答案 1 :(得分:0)
我会做这样的事情:
#include <iostream>
#include <map>
#include <string>
int main()
{
std::string st;
std::cout << "Input a sentence: " << std::endl;
std::getline(std::cin, st);
std::map<char, int> m;
for (const char c : st)
++m[c];
for (const std::pair<char, int>& me : m)
std::cout << me.first << ": " << me.second << std::endl;
}
答案 2 :(得分:-1)
lechuga2000击败了我,但是这是我的建议:
#include <iostream>
#include <map>
#include <string>
int main()
{
std::string input_sentence = "Now is the time for all good men to come to the aid of the party.";
/*
std::cout << "Input a sentence: " << std::endl;
std::getline(std::cin, input_sentence);
*/
std::map<char, int> character_counts;
for (const auto character : input_sentence)
++character_counts[character];
for (const auto counted_character : character_counts)
std::cout << counted_character.first << ": " << counted_character.second << '\n';
return 0;
}
这是输出:
: 15
.: 1
N: 1
a: 3
c: 1
d: 2
e: 6
f: 2
g: 1
h: 3
i: 3
l: 2
m: 3
n: 1
o: 8
p: 1
r: 2
s: 1
t: 7
w: 1
y: 1