如何将<char, int>类型unordered_map元素拼接为指定格式字符串?
问题解决:将unordered_map<char, int>转为目标字符串
你代码里的问题很明确:直接把int类型的数值赋值给char变量时,程序会把这个int当作ASCII码来解析,而不是转成对应的数字字符。比如int值1对应的ASCII字符是不可打印的控制字符(就是你看到的☺),这显然不是你想要的结果。
要把int数字转成对应的字符,只需要给这个int值加上字符'0'的ASCII值就行——因为字符'0'到'9'的ASCII码是连续的('0'对应48,'1'对应49,以此类推),所以value.second + '0'就能得到对应数字的字符形式。
修正后的代码如下:
#include <bits/stdc++.h> using namespace std; int main(){ unordered_map<char, int> m; m.insert({'1',1}); m.insert({'2',1}); string s = ""; for(auto& pair : m){ s += pair.first; // 关键修正:给int值加上'0'转成对应字符 s += pair.second + '0'; } cout << s << endl; }
另外注意:unordered_map是无序容器,遍历顺序不一定和插入顺序一致,所以你可能会得到"1122"或者"2211"这类结果。如果需要严格按照插入顺序或者按键排序的顺序生成字符串,可以换成map容器。
内容的提问来源于stack exchange,提问作者Krishna Nand Yadav
相关产品推荐
相关产品推荐

