删除重复字符 C语言

本题要求编写程序,将给定字符串去掉重复的字符后,按照字符ASCII码顺序从小到大排序后输出。
输入格式:
输入是一个以回车结束的非空字符串(少于80个字符)。
输出格式:
输出去重排序后的结果字符串

不理解的点:如何让相同的字符只输出一个以及如何按照ASCII码排序
请先写出思路再贴出程序 并在程序的每一步后面注释上该步骤的原因
感谢

先排序,后去重

#include <stdio.h>
char *func(char *s)
{
char t,*p,*q;
int i,j;
for(i=0;s[i];++i)
{
for(j=i;s[j];++j)
{
if(s[i]>s[j])
{
t=s[i];
s[i]=s[j];
s[j]=t;
}
}
}
for(p=s,q=s+1;*p;q++)
{
if(*p!=*q)
{
*++p=*q;
}
}
return s;
}
int main(void)
{
char s[]="dfadmnmxniajdhfmasdndjerfjen113215421";
puts(func(s));
return 0;
}

追问

感谢  思路挺好  不过我需要先进行输入而不是对初始化的字符串进行排序删除

#define N 81
int main(void) {
char s[N];
scanf ("%s",%s);
puts(func(s));
return 0;
}

我增加了输入   在PTA上提交显示如下结果

追答

改为使用gets,同时使用gets前先清空缓冲区

温馨提示:内容为网友见解,仅供参考
无其他回答

求C语言代码,删除字符串中重复字符
c=*r; *r=*p; *p=c;} } \/\/冒泡排序的代码 printf("结果字符串为:%s\\n",str);for(p=str;*p;p++){ for(q=p+1;*p==*q;q++);strcpy(p+1, q);} \/\/删除重复字符的代码 printf("结果字符串为:%s\\n",str);} -- 方法二:char *delete_adjacent_char1(char *str){ if...

...从键盘输入一个有空格的字符串,删除所有重复字符,按字符升序输出在...
printf("Input a string...\\n");for(p=a,t=0;t<100;t++)\/\/输入字符串 if((*(p+t)=getchar())=='\\n')break;(p+t)='\\0';for(p=a;*p;p++)\/\/排序 for(px=p+1;*px;px++)if(*p>*px){ t=*p;p=*px;px=t;} for(p=a;*p;p++){\/\/删除重复字符 for(t=1;*p==...

c语言 输入一个长度不超过 100 的字符串,删除串中的重复字符.
include <stdio.h>int main () { char s[101]; int i,j,k; gets(s); for(i=0;s[i];i++) { for(j=k=i+1;s[j];j++) if(s[j]!=s[i]) s[k++]=s[j]; s[k]='\\0'; }

C语言编写一个函数,将字符串中连续重复出现的字符去除
C语言自定义函数,一次性去除连续重复字符,参考代码如下:include<stdio.h> char *fun(char *str){ int i=1,j=0;if(str==NULL)return NULL;if(str[0]==0)return str;while(str[i]!=0)if(str[j]!=str[i])str[++j]=str[i++];else ++i;str[j+1]=0;return str;} int main(...

怎样用c语言编写删除重复字符的程序
程序的基本思路是把输入的字符串放到a[100]字符组中,然后把a[100]中所有不重复的字符添加到b[100]中,间接完成对字符串中的重复字符的删除 include void main(){ char a[100],b[100];\/\/定义两个字符组,a[100]用来接收输入的字符串,b[100]用来存储不重复的字符 int pa=0,pb=0,i,flag;...

C语言中删除字符串中的重复字符,然后输出新的字符串
这个容易,就是把指定位置的字符去掉,也就是说后面的字符覆盖 比如删除指定的字符在字符串中第一个出现的位置 void strdel(char str,char ch ){ char p = str;while(p ){ if(p==ch )break;} if(p ){ while(p ){ p==*(p+1);p++;} } } 希望能解决您的问题。

c语言排序后删除数组中重复的数字再排序输出
\/\/删除重复字符 voiddelete_repeat(char*str){ \/**判断数组内第i个字符是否与前i-1个字符存在重复:若重复,删除该字符,i之后的字符下标均减1,后重新判断新的第i个字符 若不重复,不做处理,继续遍历下一个 \/ for(inti=1;str[i]!='\\0';i++){ for(intj=0;j<i;j++){ if(str[i]...

...顺序从小到大进行排序,并要求删除重复的字符。答案如下
并把对应位置填充为1,同一个字符的assci值相同,所以这样就去掉了重复字符 } for(i=0;i!=256;i++)if(str2[i]==1)\/\/判断数组中被str1填充的位置,填充的是非0值,没填充的是0值 printf("%c",i);\/\/输出str2的下标值,对应str1中的字符值 putchar('\\n');return 0;} ...

C语言 删除重复字符这个程序为什么有j--
include <string.h> int main(){ int i,j,k,t;char a[200];gets(a);\/\/接收一个字符串,比如是:hello for(i=0;i<strlen(a);i++)\/\/遍历字符串,从第1个字符开始 { for(j=i+1;j<strlen(a);j++)\/\/遍历字符串,从第2个字符开始 { if(a[i]==a[j])\/\/前后字符相等,比如...

C语言 输入一个字符串 去掉重复的字符,输出无重复的
#include<stdio.h>int main(){ char str[100]="";\/\/输入字符串,自己设置长度 char out[100]=""; int letter[127]; int k=127,m=0; while(k--)letter[k]=-1; puts("input a string:"); gets(str); for(k=0;k<100;k++) letter[str[k]]++; for(k=0;k<100;k++) if(letter[str[...

相似回答