[字符串处理]7-5 字典合并 (20分)
字典合并。输入用字符串表示两个字典,输出合并后的字典,字典的键用一个字母或数字表示。注意:1和‘1’是不同的关键字!
输入格式:
在第一行中输入第一个字典字符串 在第二行中输入第二个字典字符串
输出格式:
在一行中输出合并的字典,输出按字典序。"1"的ASCII吗为49,大于1,排序时1在前,"1"在后,其它的也一样。
输入样例1:
在这里给出一组输入。例如:
{1:3,2:5} {1:5,3:7}
输出样例1:
在这里给出相应的输出。例如:
{1:8,2:5,3:7}
输入样例2:
在这里给出一组输入。例如:
{"1":3,1:4} {"a":5,"1":6}
输出样例2:
在这里给出相应的输出。例如:
{1:4,"1":9,"a":5}
思路:不用map处理,用string处理。
①判断输入类型,key值由两种情况,一种int类型(不带引号),一种char类型(带引号),分别存进a,b两数组。
②输出时,注意引号的输出
1 #include<iostream> 2 #include<string> 3 #include<cctype> 4 using namespace std; 5 int main() 6 { 7 int a[5] = {0}, sum = 0; 8 int b[201] = {0}; 9 string s1, s2; 10 cin >> s1 >> s2; 11 for (int i = 0; i < s1.length(); i++) 12 { 13 if (isalnum(s1[i]) && s1[i - 1] == '\"'&&s1[i + 1] == '\"') 14 b[s1[i]] = s1[i + 3] - '0'; 15 if (s1[i] - '0' >= 0 && s1[i] - '0' <= 9 && s1[i + 1] == ':') 16 a[s1[i] - '0'] = s1[i + 2] - '0'; 17 } 18 for (int i = 0; i < s2.length(); i++) 19 { 20 if (isalnum(s2[i]) && s2[i - 1] == '\"'&&s2[i + 1] == '\"') 21 b[s2[i]] += s2[i + 3] - '0'; 22 if (s2[i] - '0' >= 0 && s2[i] - '0' <= 9 && s2[i + 1] == ':') 23 a[s2[i] - '0'] += s2[i + 2] - '0'; 24 } 25 for (int i = 0; i < 5; i++) 26 if (a[i] != 0) 27 sum++; 28 for (int i = 0; i < 201; i++) 29 if (b[i] != 0) 30 sum++; 31 printf("{"); 32 for (int i = 0; i < 5; i++) 33 { 34 if (a[i]!=0) 35 { 36 if (sum!=1) 37 { 38 printf("%d:%d,", i, a[i]); 39 sum--; 40 } 41 else 42 { 43 printf("%d:%d", i, a[i]); 44 printf("}"); 45 } 46 } 47 } 48 for (int i = 0; i < 201; i++) 49 { 50 if (b[i]!=0) 51 { 52 if (sum!=1) 53 { 54 printf("\"%c\":%d,", char(i),b[i]); 55 sum--; 56 } 57 else 58 { 59 printf("\"%c\":%d", char(i), b[i]); 60 printf("}"); 61 } 62 } 63 64 } 65 }