输入样例:
ad2f3adjfeainzzzv
输出样例:
23adefijnvz
解题思路:
主要是去重的算法:创建两个空字符串,一个str用于存取输入的字符串,(注意这里用的是gets函数,scanf会读取不了空格,不能满足后台样例的哦),另一个new用于判断唯一新字符的出现,(运用for循环嵌套遍历查重,跟冒泡排序蛮像的),一个重要的计数器变量t,每次出现新字符都靠它来自增哦。
然后是冒牌排序的简单运用,根据Ascall码的大小进行排序,输出即可。
完整代码如下:
#include <stdio.h>
#include <string.h>
int main()
{
char str[100];//存储原始字符串
char new[100];//去重保留字符串
gets(str);//虽然被嫌弃,但是scanf碰到空格就要停了,还得是gets
int i,j,t=0;
int flag = 0;//标记变量,循环里要时刻记得重置,不然就要bug了
char temp;//用来交换变量的
for (i = 0; str[i] != '\0'; i++)//惯用字符串结束标志'\0'判断循环哦
{//该算法类似于冒泡排序,即每一个str中的字符都要拿出来跟new中的字符比较,遍历new后发现没有出现过一样的值,flag就是0,即可以添加到new里面
flag = 0;//你看,记得重置!!
for (j = 0; j < i; j++)
{
if(str[i]==str[j])
{
flag = 1;//标记值变为1,等下不能添加到new里面了
break;//直接跳出for循环,节省时间
}
}//每一个str[i]和new里面所有值比较过后,由flag判断啦
if(flag==0)//没有出现过重复值
{
new[t] = str[i];
t++;//t是独立自增的,跟新值出现有关
}
}
new[t] = '\0';//t的值偏大了,记得添加结束符
for (i = 0;new[i]!='\0';i++)//简单的冒泡排序
{
for (j = 0; j < t - i - 1;j++)
{
if(new[j]>new[j+1])
{
temp = new[j];
new[j] = new[j + 1];
new[j + 1] = temp;
}
}
}//还是不会冒泡排序的可以上记事本背代码了!!!
puts(new);//输出排序结束的new字符串,puts函数会自动换行哦
return 0;
}
以上是Macos的vs code执行结果。
希望对你有帮助哦。