输入一个长度不超过100的字符串,删除串中的重复字符。
#include <stdio.h>
#include <string.h>
#define N 200
int main()
{
char a[N]; //存储字符串.
int i,j,n;
char k;
gets(a);//读入字符串.
//控制外层循环的趟次,并提供趟次号变量i
int f=strlen(a);
for(i=0;i<strlen(a);i++)
{
for(n=0;n<i;n++)//内层遍历从i=1开始进入,控制各趟次内需要执行循环的次数
{
if(a[i]==a[n]) //n比i更加常变:每趟比较中,i只有相同的一个值,而n由i个值.;每一趟中,i就作为一个标杆
{ //a[i] == a[n]意味着出现了重复字符;
//下面这个循环将下一个值替代上一个值,即相当于把位置i之后的那部分子字符串向前集体地挪了一格,从而减小重复字符串的规模
for(j=i;j<f;j++)
{
a[j]=a[j+1]; //迭代a[j] ,并对字符数组(字符串)做出了该改变(j+1)可以触及到字符串结束符'\0' !
}
//i=i-1;//将这轮发生处理地循环重新执行??/(迭代),最外层i++会加回到这个i,
i -= 1;
break;//直达外层for
}//刚从此处离开后,n++(n将+1),之后,在这一轮发生地if将是上一轮规模地比较,不会再更改字符串了,直到外层地i++后重新开始
}
//刚从此处离开后,会执行在外面一层地循环变量迭代(i++)
}
puts(a);
return 0;
}
版本二:
#define _CRT_SECURE_NO_WARNINGS
/* 题目描述
输入一个长度不超过100的字符串,删除串中的重复字符。
输入要检查的字符串,长度不超过100个字符:abacaeedabcded.
输出删除重复字符后的字符串:abced.
样例输入saas
样例输出sa
*/
//握手模型;最理想地输入的比较次数规模(1+2+..+n)地规模(类似勾股数枚举)
#include <stdio.h>
#include <string.h>
int main()
{
//int a[100] = { 0 };
char a[100] = { 0 };
int i, j;
gets(a);
int len = strlen(a);
for (i = 0; i < len; i++)
{
const char tmp = a[i];
if (tmp != -1)
{
for (j = i + 1; j < len; j++)
{
if (tmp == a[j])
{
a[j] = -1;
}
}
}
}
for (int i = 0; i < len; i++)
{
if (a[i] != -1)
{
printf("%c", a[i]);
}
}
printf("\n");
}
/*失败的彩蛋*/
//for (i = 0; i < len; i++)
//{/*用最简单的输入测试:dd */
// const char tmp = a[i];
// for (j = i + 1; j < len; j++)
// {
// if (tmp == a[j])
// {
// for (int k = j; k < len - 1; k++)
// {
// a[k] = a[k + 1];/*要注意:k+1<len(或说k<=len-1)*/
// }
// len--;
// j = i + 1;
// }
// }//for
//}//for