字符串去重并排序
题目
输入是一个以回车结束的非空字符串(少于80个字符)。含有空格字符
输入样例:
ad2f3adjfeainzzzv
输出样例:
23adefijnvz
核心步骤
for (int i = 0; i < strlen(a); i++)
{
for (int j = 0; j < i; j++)
{
if (a[j] == a[i])
{
for (int k = i; k < strlen(a); k++)
//核心是如果在i之前有和他一样的,那么我们就应该将i后的元素整体前移一个单位。
// k < strlen(a),这使得k+1获取到的是数组结束符号'\0'
{
a[k] = a[k + 1];
}
i -= 1;
break;
}
}
}
重点之重:a[strlen(a)]=‘\0’
- 排序(冒泡排序)
for (int i = 1; i <= strlen(a)-1; i++)
{
for (int j = 0; j < strlen(a) - i; j++)
{
if (a[j] > a[j + 1])
{
char temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
完整代码
#include <stdio.h>
#include <string.h>
#include <limits.h>
int main()
{
char a[100000];
scanf("%[^\n]", a);
for (int i = 0; i < strlen(a); i++)
{
for (int j = 0; j < i; j++)
{
if (a[j] == a[i])
{
for (int k = i; k < strlen(a); k++)
{
a[k] = a[k + 1];
}
i -= 1;
break;
}
}
}
for (int i = 1; i <= strlen(a)-1; i++)
{
for (int j = 0; j < strlen(a) - i; j++)
{
if (a[j] > a[j + 1])
{
char temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
printf("%s", a);
return 0;
}