华为2016研发工程师编程题-字符集合

题目描述

输入一个字符串,求出该字符串包含的字符集合。

输入

每组数据输入一个字符串,字符串最大长度为100,且只包含字母,不可能为空串,区分大小写。

输出

每组数据一行,按字符串原有的字符顺序,输出字符集合,即重复出现并靠后的字母不输出。

示例

输入

abcqweracb

输出

abcqwer

解题

思路

这道题我看到的时候就决定用set来写,但是一开始没有看到按照原来的顺序输出,所以WA了一发。后来发现可以不需要用set来保存数据,只需要用set来查重就可以了,也就是输入一个,在set里面找有没有,有就输入下一个,没有就插入到set中,并输出到屏幕上。还有一个特殊的就是我用了字符串流的概念。

代码

    #include <iostream>
    #include <set>
    #include <sstream>
    #include <string>
    using namespace std;
    
    int main()
    {
    	string s;
    	char c;
    	
    	while (getline(cin,s))
    	{
    		set<char> letter;
    		stringstream str(s);
    		set<char>::iterator iter;
    		while (str >> c) {
    			iter = letter.find(c);
    			if (iter == letter.end()) {
    				letter.insert(c);
    				cout << c;
    			}
    		}
    		cout << endl;
    	}
    }