华为机试练习题:给出一个字符串,将重复的字符去除,仅保留第一次出现的字符,且保持去重后的字符在原字符串中的顺序不变。
输入数据是一个字符串(不包含空格)
输出去重的字符串
输入:12ere2
输出:12er
方式一:
// An highlighted block
#include<iostream>
#include<string>
#include<algorithm>
#include<unordered_set>
using namespace std;
int main()
{
string instr, outstr;
unordered_set<char> sc; //用来去重字符串中重复字符
getline(cin, instr);
for (auto c : instr)
{
if (sc.find(c) == sc.end()) // 如果set中没找到该字符
{
sc.insert(c);
outstr.append(1, c);
}
}
cout << outstr << endl;
system("pause");
return 0;
}
方式二:
// An highlighted block
int main()
{
string instr, outstr,sc;
//unordered_set<char> sc; //用来去重字符串中重复字符
getline(cin, instr);
for (int i=0;i<instr.size();i++)
{
if (sc.find(instr[i]) == string::npos) // 如果set中没找到该字符
{
sc.append(1, instr[i]);
outstr.append(1, instr[i]);
}
}
cout << outstr << endl;
system("pause");
return 0;
}
方式三:
int main()
{
string instr, outstr;
set<char> sc; //用来去重字符串中重复字符
getline(cin, instr);
for (int i = 0; i < instr.size(); i++)
{
if (sc.count(instr[i]) <1) // 如果set中没找到该字符
{
sc.insert(instr[i]);
outstr.append(1, instr[i]);
}
}
cout << outstr << endl;
system("pause");
return 0;
}
方式四:
int main()
{
string instr;
set<char> sc; //用来去重字符串中重复字符
deque<char>outstr;
getline(cin, instr);
for (int i = 0; i < instr.size(); i++)
{
if (sc.count(instr[i]) < 1) // 如果set中没找到该字符
{
sc.insert(instr[i]);
outstr.push_back( instr[i]); //在队尾插入
}
}
while (!outstr.empty())
{
cout << outstr.front(); //取队首
outstr.pop_front(); //去队首
}
cout<< endl;
system("pause");
return 0;
}