/** ** ** 题目:删除一个字符串中出现次数最少的字符,函数原型为: ** ** char * delChar(char *s,int iLen) ** ** 其中 s为输入字符串,iLen为输入字符串长度。 ** ** 如输入字符串为“abcdd”,输出为"dd"。 ** ** 字符串中只有小写字母,不含空格且字符串最大长度不超过20。 **/
方法一:
#include <stdio.h> #include <string.h> #include <malloc.h> char * delChar(char *s,int iLen) { if((s == NULL) || iLen <= 0) { return NULL; } int i; /*定义能够长度为26的数组*/ const int MAXLEN = 26; /*min表示字符串中字符最少的数目*/ /*数组nCountTable分别存储当前字符串中存在的字符数目,不存在则为0*/ unsigned int min,nCountTable[MAXLEN]; /*初始化为0*/ for(i = 0;i < MAXLEN;i ++) { nCountTable[i] = 0; } /*统计当前字符串中各个字符的数目*/ for(i = 0;i < iLen;i ++) { nCountTable[*(s + i) - 'a'] ++; } /*把nCountTable数组中第一个不为0的,作为第一个数,用于找出最少的个数*/ while(nCountTable[i] == 0) { i ++; } min = nCountTable[i]; /*找出字符数目最少的那个数,不存在的不算入其中*/ for(i = 0;i < MAXLEN;i ++) { if(nCountTable[i] != 0) { if(nCountTable[i] < min) { min = nCountTable[i]; } } } /*删除字符串中最少的字符,并且返回*/ char *pSlow = s; char *pFast = s; while(*pFast != '\0') { if(nCountTable[*pFast - 'a'] != min) { *pSlow = *pFast; pSlow ++; } pFast ++; } *pSlow = '\0'; return s; } int main() { char str[] = "abadccdehigiktk"; int iLen = strlen(str)/sizeof(char); char *tmp = delChar(str,iLen); printf("%s\n",tmp); }
方法二:
#include <stdio.h> #include <string.h> #include <malloc.h> char * delChar(char *s,int iLen) { if((s == NULL) || iLen <= 0) { return NULL; } int i; /*定义能够长度为26的数组*/ const int MAXLEN = 26; /*min表示字符串中字符最少的数目*/ /*数组nCountTable分别存储当前字符串中存在的字符数目,不存在则为0*/ unsigned int min,nCountTable[MAXLEN]; /*初始化为0*/ for(i = 0;i < MAXLEN;i ++) { nCountTable[i] = 0; } /*统计当前字符串中各个字符的数目*/ for(i = 0;i < iLen;i ++) { nCountTable[*(s + i) - 'a'] ++; } /*把nCountTable数组中第一个不为0的,作为第一个数,用于找出最少的个数*/ while(nCountTable[i] == 0) { i ++; } min = nCountTable[i]; /*找出字符数目最少的那个数,不存在的不算入其中*/ for(i = 0;i < MAXLEN;i ++) { if(nCountTable[i] != 0) { if(nCountTable[i] < min) { min = nCountTable[i]; } } } /*删除字符串中最少的字符,并且返回*/ char *tmp = (char *)malloc(sizeof(char)*iLen); i = 0; while(*s != '\0') { if(nCountTable[*s - 'a'] != min) { *(tmp + i) = *s; i ++; } s ++; } *(tmp + i) = '\0'; return tmp; } int main() { char str[] = "abadccdehigiktk"; int iLen = strlen(str)/sizeof(char); char *tmp = delChar(str,iLen); printf("%s\n",tmp); }