面试题-华为(16年)-字符集合去重-5

本文解析了一道来自华为2016年的面试编程题,题目要求输入一个字符串,并输出该字符串中不重复的字符集合。文章通过C++代码示例详细介绍了如何解决这一问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是从牛客网上找到的华为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;   
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值