作为我上面评论的解决方案,您提供的代码的 C++ 版本:
typedef map<std::string, int> wc;
int main() {
int c;
string cc, nombre;
wc m;
std::cin >> c;
while (c--) {
std::cin >> cc;
std::getline(std::cin, nombre);
m[cc] += 1; // This should work
}
printmap(m);
}
http://ideone.com/2JP82
首先:std::map
根据代码中的键对数据进行排序,char*
,它指向char cc[75]
。因此,当您替换 中的文本时cc
,地图的键发生了变化,这破坏了一切。地图的键永远不能改变。因为我们使用的是 C++,所以你根本不应该使用char[]
;改为使用std::string
它(因为它是“值类型”)将使一切都神奇地工作。我不知道它以前是如何工作的,因为您没有显示该printmap
功能。
第二:您printmap
每次阅读一行时都会调用,并且由于 amap
无法打印“最后添加的内容”,因此该想法根本没有意义。该printmap
调用可能应该打印整个地图,并且在循环之外。
第三:不要使用scanf
,不安全。使用流:std::cin >> cc
阅读单个单词,或std::getline(std::cin, nombre)
阅读剩下的内容。这样,如果有人进入该行,代码就不会崩溃(最长国家名称和最长姓氏的来源)
Krungthepmahanakornamornratanakosinmahintarayuttha-yamahadilokphopnopparatrajathaniburiromudomrajaniw-esmahasatharnamornphimarnavatarnsathitsakkattiyavi-sanukamprasit Wolfeschlegelsteinhausenbergerdorffvortschaferswesenchafewarenwholgepflegeunzenvonangereifenduchihrraubgiriigfeindtausendjahresvorandieerscheinenbanderechiffgebrauchlichtalsseinursprungvonkrrthinzwischensternartigraumaufdersuchebtbewohnbarplanetenkreisedrehensichundstandigmenshlichkeittkonntevortpflanzeslamdlichfreudeundruhemitnichteinfurchrintlligentgeschopfsvonhinzwischenster