华为2013校园招聘上机笔试题-删除一个字符串中出现次数最少的字符
2013华为校园招聘机试题9月10日题
题目及参考解答来源:http://blog.csdn.net/caollcool/article/details/7971752
http://blog.csdn.net/nixindong1984/article/details/7964555
4.【功能】 删除一个字符串中出现次数最少的字符
【函数原型】char * delChar(char *s,int iLen)
【输入】s为输入字符串
iLen为输入字符串长度
【返回】如输入字符串为“abcdd”,输出为"dd" 。字符串中只有小写字母,不含空格且字符串最大长度不超过20。
1 #include <stdio.h> 2 #include <string.h> 3 #include <malloc.h> 4 5 char *delChar(char *s,int iLen) ; 6 7 int main(void) 8 { 9 char str[] = "abebadchtcdeghigiktkk"; 10 11 int iLen = strlen(str)/sizeof(char); 12 char *tmp = delChar(str,iLen); 13 printf("%s\n",tmp); 14 15 return 0; 16 } 17 18 char *delChar(char *s,int iLen) 19 { 20 if (NULL == s || iLen < 0) 21 { 22 return NULL; 23 } 24 25 int i = 0; 26 /*一共有26个字母,数组的最大数值为26,min存放字符中最少的个数*/ 27 const int MAXLEN = 26; 28 int min, nCountTable[MAXLEN]; 29 /*初始化*/ 30 for (i = 0; i < MAXLEN; i++) 31 { 32 nCountTable[i] = 0; 33 } 34 /*计算得出现有的字符数目;*/ 35 for (i = 0; i < iLen; i++) 36 { 37 (nCountTable[*(s+i) - 'a'])++; 38 } 39 40 for (i = 0; i < MAXLEN; i++) 41 { 42 printf("%3d", nCountTable[i]); 43 } 44 putchar('\n'); 45 46 i = 0; 47 //找出数组中的一个不等于0的值 48 while(nCountTable[i] == 0) 49 { 50 i++; 51 } 52 /*求出min值*/ 53 min = nCountTable[i]; 54 for (i = 0; i < MAXLEN; i++) 55 { 56 if (nCountTable[i] != 0) 57 { 58 if (nCountTable[i] < min) 59 { 60 min = nCountTable[i]; 61 } 62 } 63 } 64 /*将字符串中字符非最少的字符存放在一个临时变量中,并给出地址。*/ 65 char *temp; 66 i = 0; 67 temp = (char *) malloc(iLen * sizeof(char)); 68 while(*s != '\0') 69 { 70 if (nCountTable[*s - 'a'] != min) 71 { 72 *(temp + i) = *s; 73 i++; 74 } 75 s++; 76 } 77 *(temp + i) = '\0'; 78 79 return temp; 80 }
posted on 2012-09-19 22:20 Raphael Lou 阅读(501) 评论(0) 编辑 收藏 举报