输入一个字符串,求字符串中包含的字符集合

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/guorong520/article/details/81165510

输入:abcqweracb
输出:abcqwer

一、剖析

采用数组的方式,定义一个可以存放256个字符的数组(ASCII最多包含256个字符),先将数组初始化1,然后开始进行遍历输入字符串,第一次遇到就将其输出,并将数组中的字符值改为0。
这里写图片描述

二、在线oj,输入输出

  1. 对于<剑指Offer>这种有函数定义的题目,你只要完成函数,返回相关的值就可以,不需要处理任何输入输出,不要在函数里输出任何东西。
  2. 对于传统ACM的OJ模式题目,你的程序需要stdin(标准输入)读取输入,然后stdout(标准输出)来打印结果,需要引入必要的头文件,代码禁止读取和写入任何文件,否则判题系统将会返回运行错误。如果OJ需要一次处理多个测试用例,就需要进行循环处理,一般通过while循环来处理多个case。

三、代码示例

第一种写法:

void one(string str)
{
    char arr[256] = { 0 };
    int i = 0;
    int len = sizeof(arr) / sizeof(arr[0]);
    int length = str.length();
    for (i = 0; i<len; i++)
    {
        arr[i] = 1;  //将256个元素全部初始化为1
    }
    for (i = 0; i<length; i++)
    {
        if (arr[str[i]] == 1)
        {
            cout << str[i];
            arr[str[i]] = 0;
        }
    }
    cout << endl;
}
int main()
{
    string str;
    while (cin >> str)  //循环输入
    {
        one(str);
    }
    return 0;
}

第二种写法:

void one(string str)
{
    int i=0;
    vector<bool> a(256,false);  //开辟256个空间,并初始化为false
    for(i;i<str.size();i++)
    {
        if(a[str[i]]==false)
        {
            cout<<str[i];
            a[str[i]]=true;
        }
    }
    cout<<endl;
}
int main()
{
    string str;
    while(cin>>str)  //循环输入
    {
        one(str);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/guorong520/article/details/81165510