这是从牛客网上找到的华为16年面试题,题目比较简单,也比较基础,但是如果长时间没有练手的话,写起来还是有点麻烦。我抽了一点时间把它做了,题目中用到了C++的STL,其他的循环比较基础,后面的标志位(flag)是我编程中惯用的手法,档次可能不高,但是很好用。
其他的问题我在代码中有注释,方便查看与阅读。
该面试编程题来自于牛客网,本人分享在此仅供大家学习与交流用,不担负任何法律责任。博文版权归博主所有,转载需注明出处。下面开始正题:
问题描述
字符集合:输入一个字符串,求出该字符串包含的字符集合
输入描述
每组数据输入一个字符串,字符串最大长度为100,且只包含字母,不可能为空串,区分大小写。
输出描述
每组数据一行,按字符串原有的字符顺序,输出字符集合,即重复出现并靠后的字母不输出。
输入例子
abcqweracb
输出例子
abcqwer
程序与代码
#include <iostream>
#include <string>
//#include <list>
using namespace std;
//typedef list<char> LISTCHAR;
int main()
{
string input,sub;
string::iterator str_it; //使用string的迭代器,方便在字符串变化后循环
static bool EXSIST=false; //设置标志,判断字符是否重复
int str_len;
cin >> input;
str_len = input.length();
//LISTCHAR chlist; //当初想用List,后来发现没有必要,就用string。
//LISTCHAR::iterator it;
//cout << "length:"<<str_len <<endl;
if(str_len == 0)
return 0;
for(int i=0;i<str_len;i++)
{
/*开始循环判断字符在不在sub中,如果不在将标志位置为false*/
for(str_it=sub.begin();str_it!=sub.end();str_it++)
{
/*
当初循环里顺便把字符放了进去,发现逻辑是错的,
因为判断一个字符与第一个字符不相同不能表示后
面的也不相同
*/
if(*str_it == input[i])
EXSIST = true;
}
if(EXSIST == true)
{
EXSIST = false; //完成一次判断,将标志位置为false,方便下一次判断
}
else
{
sub += input[i];
}
}
cout<<sub<<endl;
return 0;
}