如题,倒序后去掉重复的字符输出。包括空格字符也算入在内,而且不能输出重复的字符。
比如abs a wr 输出rw asb
char buf[100];
scanf("%s", buf);
int n = strlen(buf);
for (int i = n - 1; i>= 0; i--)
{
int flag = 0;
for (int j = i + 1; j < n; j++)
{ if (buf[i] == buf[j]) { flag = 1; break; } }
if (!flag) printf("%c", buf[i]);
}
printf("\n")
一个简单易懂的思路,两层for循环,遍历每个元素对比,适合条件的放到一个数组中,最后倒叙输出。
使用一个数组记录某个字符是否已显示过,若已显示过那么不要显示它,倒叙就从末尾坐标开始进行向前端循环就OK了,一遍判断一遍输出,
数组可默认全0,若有一个是1那么就输出它. 想1楼的做法也可以,不过若字母很多的话 花费的时间会有点长。
说错了,数组全默认为0,是没有使用过,那么你可以输出这个字符,然后把相应的数组=1, 数组[ 字符串[i]-'0']]=1这样子的。。
若是1,就表示使用过啦,空格也逃不出,因为' '也是有值得表示的。把数组定义差不多大就OK了。。看看ASCII码表~
字符串替换,替换为空,然后倒着输出
如果是ASll中的字符去重
#include
#include
const int MAX=100;//输入的字符长度
int used[128];
int main()
{
char s[MAX];
gets(s);
memset(used,0,sizeof(used));
for(int i=strlen(s)-1;i>=0;i--)
{
if(!used[s[i]])
{
printf("%c",s[i]);
used[s[i]]=1;
}
}
printf("\n");
return 0;
}