实验7-3-10 删除重复字符(20 分)

实验7-3-10 删除重复字符(20 分)
本题要求编写程序,将给定字符串去掉重复的字符后,按照字符ASCII码顺序从小到大排序后输出。

输入格式:
输入是一个以回车结束的非空字符串(少于80个字符)。

输出格式:
输出去重排序后的结果字符串。

输入样例:
ad2f3adjfeainzzzv

输出样例:
23adefijnvz

#include<stdio.h>
#include<string.h>
#define N 85
//思路:首先用字符数组str1存储输入的字符串,然后删除str1中重复的字符保存到str2中,
//       最后根据ASCII的顺序使用冒泡排序算法进行排序,注意:本题默认只有数字和小写字母
//       两种字符,且根据ASCII码表可知,数字的ASCII值小于小写字母的ASCII值。
//        本题重点是:删除多余的字符,要不断的更新和存储不重复的字符。
int main(void)
{
	int i, j, flag, len1 = 0, cnt = 0;
	char ch, temp;
	char str1[N];  //存储输入的字符串
	char str2[N];  //存储处理后的字符串

	ch = getchar();  //输入字符串
	for (i = 0; ch != '\n'; i++)
	{
		str1[i] = ch;
		len1++;
		ch = getchar();
	}

	for (i = 0; i < len1; i++) //双重循环,删除str1[]中重复的字符
	{
		flag = 0;    //每次开始循环都更新flag
		for (j = 0; j < i; j++)
		{
			if (str1[i] == str1[j])  //在str1中查找重复的字符
			{
				flag = 1;
			}
		}
		if (flag == 0)
		{
			str2[cnt] = str1[i];  //用str2保存从str1中找到的字符
			cnt++;  //记录不重复字符的个数
		}
	}
	for (i = 0; i < cnt - 1; i++) //对str2[]排序: 冒泡排序 进行cnt-1次
	{
		for (j = 0; j < cnt - i - 1; j++)
		{
			if (str2[j] > str2[j + 1])
			{
				temp = str2[j];
				str2[j] = str2[j + 1];
				str2[j + 1] = temp;
			}
		}
	}

	for (i = 0; i < cnt; i++)
	{
		printf("%c", str2[i]);
	}
	printf("\n");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/aa11224488/article/details/80294472