我有一个字符串向量 例: dedf EEDF FEDF hedf
我想查看列表并计算每个字母出现的次数
所以例如这封信 d出现5次 e出现5次 f出现5次 h出现1次
到目前为止我没有代码,但我正试着看看如何用逻辑首先做到这一点。
我正在尝试编码,但不知道从哪里开始。
我在想我可以将每个字母存储到一个字符串中。 字符串将是{dedfeedffedfhedf}
然后取每个字母在该字符串中的字符串并计数 但这是我遇到问题的地方。有什么想法吗?
任何建议也将不胜感激。
谢谢
答案 0 :(得分:5)
一般算法可能是:
create empty array/map/storage container for counting
for each string in the vector
for each character in the string
counter[character] += 1
答案 1 :(得分:2)
你可以通过几种方式做到这一点(当然是伪代码):
for each letter you are interested in:
for each character in the string:
if letter matches character:
increment counter
print letter and counter
或
declare array of counters, one for each letter
for each character in the string:
if character is a letter:
increment that counter in the array
print counters from array
或
sort the characters in the string
for each character in the sorted string:
if character is a letter:
count the number of times that letter occurs
print letter and count
这些方法中的每一种都具有不同的性能特征。一些额外的时间(嵌套循环或排序)权衡空间(在计数器数组中)。看看你是否可以确定哪一种最适合你的情况。
答案 2 :(得分:2)
您可以拥有一个数组来保存每个字母的数量。如果我们只假设字母表,你将有一个包含26个元素的数组(可能是整数),全部初始化为0.然后你可以遍历每个字符串,每次遇到一个字符时,你都会递增该数字。 / p>
//let's call your vector of strings stringvec
int counts[26];
//initialize counts to 0
//go through each string in the vector
for (int i = 0; i < stringvec.size(); i++) {
//get current string
string curstr = stringvec[i];
//for each letter in the string
for (int j = 0; j < curstr.size(); j++) {
//curstr[j] is a character at position j in the string
//subtracting 'a' from it will give you the position in relation to 'a' in ASCII, so a character 'a' = 0, 'b' = 1, 'c' = 2, and so on...
counts[curstr[j] - 'a']++;
}
}
然后你随心所欲地做任何你想做的事。
答案 3 :(得分:1)
使用数组来存储字母数是明智的,这样你就可以在O(1)中访问随机选择的字母数。
int letters[26] = {0};
...
char c;
if (c >= 'a' && c <= 'z')
letters[c - 'a']++;
...
return 0;
检查this lecture by Richard Buckland (video) - 15:20启动可以帮助你的部分;)
答案 4 :(得分:1)
#include <iostream>
#include <vector>
#include <string>
#include <unordered_map>
using namespace std;
typedef vector<string> StrVector;
typedef unordered_map<char, int> CharIntMap;
int main() {
//the following code will work only with a c++11 compiler
StrVector words = {"dedf", "eedf", "fedf", "hedf"};
CharIntMap counts;
for (string &word : words) {
for (char &letter : word) {
counts[letter]++;
}
}
for (auto it : counts) {
cout << "Count of letter " << it->first << " = " << it->second << endl;
}
return 0;
}
答案 5 :(得分:0)
您需要一个数据结构,允许您将字母映射到计数。遍历向量,遍历字符串中的每个字符,并在地图中查找字符,并递增计数。