题目描述
输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。
输入描述
每个测试输入包含2个字符串
输出描述
输出删除后的字符串
输入输出示例
输入:
They are students.
aeiou
输出:
Thy r stdnts.
题目分析
本题可以采用Hashtable映射,
- 将第二个字符串中的字符映射到Hashtable[256]这个数组中,记录第二个字符串中出现的字符。
- 然后判断死一个字符串,如果不在就将该字符追加到一个新的字符串上,因为删除的话,效率比较低,而且数据还要进行移动。
- 最后返回这个新的字符串。
代码实现
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s1, s2;
string s;
getline(cin, s1);//将输入字符串显示在屏幕上
getline(cin, s2);
//使用Hashtable统计s2中出现的字符
int Hashtable[256] = {0};
for(int i = 0; i < s2.size(); ++i)
{
Hashtable[s2[i]]++;
}
// 遍历s1,s1[j]映射hashtable对应位置为0,则表示这个字符在s2中没有出现过,
// 则将他追加到s。注意这里最好不要s1.erases(j),因为边遍历,边erase,容易出错。
for(int j = 0; j < s1.size(); ++j)
{
if(Hashtable[s1[j]] == 0)
s+=s1[j];
}
cout << s << endl;
return 0;
}