短代码实现删除重复字符
删除重复字符这个题目用到的主要是字符串的知识点,但是写出来的代码很长,于是我开始找有没有更简短的代码可以实现删除重复字符这件事情。通过网上的材料和朋友们的帮助,我巧妙地用简短的代码实现了它。
一、题干部分
本题要求编写程序,将给定字符串去掉重复的字符后,按照字符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 }

浙公网安备 33010602011771号