去除重复字符并排序
运行时间限制:无限制
内容限制: 无限制
输入: 字符串
输出: 去除重复字符并排序的字符串
样例输入: aabcdefff
样例输出: abcdef
没看到结果里面要求排序,所以大意了写成了这样:
#include<iostream>
using namespace std;
int main()
{
char str[100];
gets(str);
cout<<endl;
int len=strlen(str);
for(int i=0;i<len;i++)
{
if(str[i]!=str[i+1])
{
cout<<str[i];
}
}
system("pause");
return 0;
}
对于排序,我才用了重建数组的方法,利用
for(int i=0;i<len;i++)
{
re_str[(str[i]-'a')]=str[i];
}
数组的一种使用方法:
str[0]='a';
str[1]='b';
cout<<re_str[str[0]]<<endl;//相当于输出re_str[97]
cout<<re_str[str[1]]<<endl; <span style="font-family: Arial, Helvetica, sans-serif;">//相当于输出re_str[98]</span>
-------------------------------------------------------割-------------------------------------------------------
for(int i=0;i<len;i++)
{
re_str[(str[i]-'a')]=str[i];
}
附录(ASCII编码表):
http://baike.baidu.com/link?url=SCujkQ1YOltqWCFKaoOTVYC6CvJ3c_Yzsk3aTM6SOPwiCcoTR08vgIkd2ZAimh79wYQuLG-GG67O_lqu4o4C06PK9oCDi5ZmcXrUrC7N8pLR-bR-gsgh_9INWPf7wJit
也产生了一个疑问?
for(int j=0;j<26;j++)
{
if((re_str[j]>='a') && (re_str[j]<='z'))//本来想使用if(re_str[j]!=NULL),结果有问题
cout<<re_str[j];
}
答案:
<span style="color:#ff0000;"><strong>c语言中char str1[10]=' ';编译时是不能通过的。因为一个10个元素的字符数组,不能只给它赋值一个元素。
可以通过的是:
char str1[10]={' '};或
char str1[10]=" ";
这二种写法的结果是相同的。即:定义一个有10个元素的字符数组,并初始化,首字节为一个空格字符,后面的9个元素值为空字符('\0')。</strong></span>
受到启发后,这样初始化:
char re_str[26]={'\0'};
//----------------------割-------------------
for(int j=0;j<26;j++)
{
if(re_str[j]!='\0')//本来想使用if(re_str[j]!=NULL),结果有问题
cout<<re_str[j];
}
程序2:
#include<iostream>
using namespace std;
int main()
{
char str[100];
gets(str);
cout<<endl;
int len=strlen(str);
char re_str[26];
//for(int k=0;k<10;k++) //调试
// cout<<(str[k]-'a')<<endl;
for(int i=0;i<len;i++)
{
re_str[(str[i]-'a')]=str[i];
}
for(int j=0;j<26;j++)
{
if((re_str[j]>='a') && (re_str[j]<='z'))//本来想使用if(re_str[j]!=NULL),结果有问题
cout<<re_str[j];
}
cout<<endl;
system("pause");
return 0;
}
或者(小小改动+验证)
#include<iostream>
using namespace std;
int main()
{
char str[100];
gets(str);
cout<<endl;
int len=strlen(str);
char re_str[26]={'\0'};
//for(int k=0;k<10;k++) //调试
// cout<<(str[k]-'a')<<endl;
for(int i=0;i<len;i++)
{
re_str[(str[i]-'a')]=str[i];
}
for(int j=0;j<26;j++)
{
if(re_str[j]!='\0')//本来想使用if(re_str[j]!=NULL),结果有问题
cout<<re_str[j];
}
cout<<endl;
system("pause");
return 0;
}