作为我上面评论的解决方案,您提供的代码的 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