在字符串c ++的向量中查找字母数

时间:2012-01-31 22:33:05

标签: c++ vector

我有一个字符串向量 例: dedf EEDF FEDF hedf

我想查看列表并计算每个字母出现的次数

所以例如这封信 d出现5次 e出现5次 f出现5次 h出现1次

到目前为止我没有代码,但我正试着看看如何用逻辑首先做到这一点。

我正在尝试编码,但不知道从哪里开始。

我在想我可以将每个字母存储到一个字符串中。 字符串将是{dedfeedffedfhedf}

然后取每个字母在该字符串中的字符串并计数 但这是我遇到问题的地方。有什么想法吗?

任何建议也将不胜感激。

谢谢

6 个答案:

答案 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)

您需要一个数据结构,允许您将字母映射到计数。遍历向量,遍历字符串中的每个字符,并在地图中查找字符,并递增计数。