很容易懂.
但能告诉我strcat(a,&a[j]);是什么意思吗?
一分耕耘,一分收获。
这是一个字符串函数.
原型:extern char *strcat(char *dest,char *src);
用法:#include <string.h>
功能:把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'。
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
返回指向dest的指针。
数组名就是符数组的首地址,字符数组以'\0'组束;
故a[j-1]='\0'就是将数组a分成两个数组,而a[j-1]='\0'就相当于把a[j-1]删除;
再用strcat(a,&a[j]);将两个数组连接起来.得到新的数组;
neverTheSame的对于不是字母的字符就没折了.
我认为用二叉树要好的多。时间复杂度要小的多,只在构建二叉树的过程中就把重复数字去除了。
#include <stdio.h>
void main()
{
int i,j=0;
char a[100];
char b[75]={0}; /*字符对应的ASCII码的十进制 0=48 9=57 A=65 Z=90 a=97 z=122 122-48+1=75*/
printf("请输入一个字符串:");
scanf("%s",a);
for (i=0;i<strlen(a);i++)
if (b[a[i]-48]!='1')
{ b[a[i]-48]='1';a[j]=a[i];j++; }
a[j]='\0';
printf("%s",a);
getch();
}
我想这个是最好的!
#include <stdio.h>
#include <malloc.h>
char allchar[256];
char *MALLOC(int i);
char *GetString(int i);
char *DelString(char *str);
char *MALLOC(int i)
{
char *ch;
ch=(char *)malloc(sizeof(char)*i);
if(ch==NULL)
{
fprintf(stderr," malloc() is not success!\n");
exit(1);
}
return ch;
}
char *GetString(int i)
{
int a;
char *p;
a=getchar();
if(a=='\n'||a==EOF)
{
p=MALLOC(i);
*(p+i-1)='\0';
return p;
}
else
{
p=GetString(i+1);
}
*(p+i-1)=a;
return p;
}
char *DelString(char *str)
{
char *str1,*str2;
str1=str2=str;
while(*str!=0)
{
if(allchar[(unsigned char)(*str)]==0)
{
allchar[(unsigned char)(*str)]=1;
*str1++=*str++;
}
else
str++;
}
*str1=0;
return str2;
}
int main(void)
{
char *str;
str=GetString(1);
printf("\n\nold strings: %s\n",str);
str=DelString(str);
printf("\n\nnew strings: %s\n",str);
free(str);
return 0;
}