输入:abcqweracb
输出:abcqwer
一、剖析
采用数组的方式,定义一个可以存放256个字符的数组(ASCII最多包含256个字符),先将数组初始化1,然后开始进行遍历输入字符串,第一次遇到就将其输出,并将数组中的字符值改为0。
二、在线oj,输入输出
- 对于<剑指Offer>这种有函数定义的题目,你只要完成函数,返回相关的值就可以,不需要处理任何输入输出,不要在函数里输出任何东西。
- 对于传统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;
}