输入一个含若干字符的字符串,分别找出字母和数字,其余字符忽略,将重复的去掉后分别按从小到大的顺序输出。
本人初学,望高人指点,谢过!!!
#include <stdio.h> #include <stdlib.h> #include<string.h> #define N 100 int cmp(const void *a,const void *b)/*排序函数中的比较函数*/ { return (*(char *)a-*(char *)b); } void input(char *a)/* 输入 */ { printf("input a[]:\n"); scanf("%s",a); } void _sort(char *a) /* 排序 */ { qsort(a,strlen(a),sizeof(a[0]),cmp); } void _del(char *a) /*删除相同字符的函数 */ { int i,j,t; char b[N]; /* 定义个字符型数组,用于拷贝 */ t=strlen(a); /* 得出字符串 a 的长度+1 */ for(i=0;i<t;++i) for(j=i+1;j<t;++j) if(a[i]==a[j]) /* 当发现相同的两个字符时 */ { while(a[j]==a[j+1]) /* 往下比较,直到发现不相同的字符 */ j++; strcpy(b,a); /* 拷贝字符串 a 到 b 中 */ b[i]=0; /* 截取发现相同字符的位置 */ strcat(b,&a[j]); /*把中间相同的字符舍弃,然后把字符串 a 接到 b 上*/ strcpy(a,b); /* 把新的字符串 b 拷贝到 a 上*/ t=strlen(a); /* 测出新的 a 串的长度+1 */ break; /* 跳出本次循环 */ } } int main(void) { int i=0,j,k; char a[N]; char Char[N],num[N]; input(a); /* 输入字符串 */ for(k=j=0;i<strlen(a);++i) { if((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z')) Char[j++]=a[i]; /* 当发现字符时,存入存储字符的字符串 */ if(a[i]>='0'&&a[i]<='9') num[k++]=a[i]; /* 当发现数字时,存入存储数字的字符串 */ } Char[j]=num[k]=0; /* 添加结束标记 */ _sort(Char); _sort(num); /* 排序 */ _del(Char); _del(num); /* 删除相同的字符 */ puts("char="); /* 输出 */ puts(Char); puts("num="); puts(num); return 0; }