短代码实现删除重复字符

    删除重复字符这个题目用到的主要是字符串的知识点,但是写出来的代码很长,于是我开始找有没有更简短的代码可以实现删除重复字符这件事情。通过网上的材料和朋友们的帮助,我巧妙地用简短的代码实现了它。

一、题干部分

本题要求编写程序,将给定字符串去掉重复的字符后,按照字符ASCII码顺序从小到大排序后输出。

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

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

输入样例:
ad2f3adjfeainzzzv
结尾无空行
输出样例:
23adefijnvz

 

二、思路

    1.定义两个数组。一个数组是char型名为str的字符数组,可以存放81个字符;另一个数组是int型名为ASCII的一维数组,由于ASCII有128个,所以定义一个可以存放128个数的一位数组,并将其初始化为0。

    2.在字符数组中输入数据,记得最后要把str[i]字符赋值为'\0'。

    3.利用一个循环,遍历字符串,将字符串的每个元素转化成对应的ASCII码,找到ASCII码中对应的单元,并将其,赋值为1,表示为这个字符已经出现过。这样处理的话,如果后续有出现重复字符,该字符对应的ASCII数组单元的值仍为1。

    3.再用一个循环遍历ASCII数组,如果有某个单元数值为1,就把那个单元序号对应的字符输出,这样操作不仅删除了重复字符,还实现了按顺序输出。

 

三、代码实现

 1 #include<stdio.h>
 2 int main() {
 3     int ascii[128] = { 0 };
 4     char str[81];
 5     int i = 0, j = 0, k = 0, n = 0;
 6     while ((str[i] = getchar()) != '\n')//输入字符串
 7         i++;
 8     str[i] = 0;
 9 
10     for (i = 0; str[i] != '\0'; i++)//强制转化成ASCII码
11     {
12         ascii[(int)str[i]] = 1; //把数组的字符转换成ASCII 作为ASCII数组的单元序号
13     }
14     for (i = 0; i < 128; i++)
15     {
16         if (ascii[i] == 1)
17         {
18             printf("%c", i);
19         }
20     }
21     return 0;
22 }

 

posted @ 2021-11-18 22:00  林韵璇  阅读(582)  评论(0)    收藏  举报