给定两个字符串 A 和 B,本题要求你输出 A+B,即两个字符串的并集。要求先输出 A,再输出 B,但重复的字符必须被剔除。
输入格式:
输入在两行中分别给出 A 和 B,均为长度不超过 106的、由可见 ASCII 字符 (即码值为32~126)和空格组成的、由回车标识结束的非空字符串。
输出格式:
在一行中输出题面要求的 A 和 B 的和。
输入样例:
This is a sample test to show you_How it works
输出样例:
This ampletowyu_Hrk
================================================================================================
【分析】题意是给字符串,输出不重复的字符。举个栗子:给一个字符串s是"AAB_CCA_",输出应该是“AB_C”。
那么大概思路是:遍历字符串,当字符第一次出现时,输出这个字符;如果这个字符不是第一次出现,则不能输出。
我们需要一个int hash[127] = { 0 },为什么?因为给定的输入ASCII码值位于 32-126之间。
字符第一次出现时,输出它,并且标记这个字符已出现,
即 hash[s[i]] = 1; //s[i]是字符,在运算时把它当成int。比如里面的s[i] = 'A',它的ASCII码值是65,hash[s[i]] = hash[A] = hash[65];
注:空格在这里也算作字符读入,因为cin >> s;读不进空格,故我们使用getline()函数输入string,用法参照博主的代码。
================================================================================================
#include <iostream>
using namespace std;
int main(){
int hash[127] = { 0 };
string a, b, s;
getline(cin, a);
getline(cin, b);
s = a + b;
for(int i = 0; i < s.size(); ++i){
if(hash[s[i]] == 0) cout << s[i];
hash[s[i]] = 1;
}
return 0;
}