我正在尝试将字符串单词插入到 vector 中,然后让它出现。 我在这里做了重要的工作。 问题在于计算代码下方的单词计数每个字符出现的次数。
可能我是将字符插入到 vector 而不是单词中。我试图从谷歌获得解决方案,但没有得到我想要的。
#include <iostream>
#include <algorithm>
#include <map>
#include <cstring>
#include <vector>
#include <string>
#include <sstream>
#include <algorithm>
#include <unordered_map>
std::pair < int, std::string > mytransform(const std::pair < std::string, int >p)
{
return std::pair < int, std::string > (p.second, p.first);
}
int main(int argc, char *argv[])
{
std::string result_string=argv[1];
std::istringstream iss;
std::multimap < int, std::string, std::greater < int >>dst;
std::multimap < int, std::string >::iterator rec;
typedef std::unordered_map<std::string,int> occurrences;
occurrences s1;
std::vector<std::string> most;
std::map < std::string, int >src;
std::vector<std::string> writable(result_string.size() + 1);
std::copy(result_string.begin(), result_string.end(), writable.begin());
for (std::vector < std::string >::iterator it = writable.begin(); it != writable.end(); it++)
++src[*it];
std::transform(src.begin(), src.end(), std::inserter(dst, dst.begin()), mytransform);
std::multimap < int, std::string >::iterator it = dst.begin();
for (it = dst.begin(); it != dst.end(); ++it)
std::cout << it->second << ":" << it->first << std::endl;
return 0;
}
输出:
technoworld@ubuntu:~/Videos/LinSocket/Modular$ ./q "one one two"
o:3
:2
e:2
n:2
t:1
w:1
:1
应该是:
technoworld@ubuntu:~/Videos/LinSocket/Modular$ ./q "one one two"
one:2
two:1
最佳答案
#include <iostream>
#include <map>
#include <sstream>
int main() {
std::string input = "one one two";
std::istringstream in(input);
std::map<std::string, unsigned> counter;
std::string s;
while(in >> s) {
++counter[s];
}
for(const auto& kv: counter) {
std::cout << kv.first << ": " << kv.second << std::endl;
}
return 0;
}
关于c++ - 将字符串的每个单词插入 vector 并计算每个单词的出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18590468/