C/C++面试题(4)——统计输入字符串中字符的频度
2016-09-01 11:16
260 查看
这是一道很普通的题目,这里给出的代码的一个关键点就是使用字符的ASCII码作为数组的下标直接对应该字符。
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> struct Freq { char alpha; int freq; }; typedef struct Freq FREQ; void showFreq(FREQ *freq, int cnt); FREQ *getFreq(char *str, int *cnt); void showFreq(FREQ *freq, int cnt) { printf("\n字符\t频度\n"); if (NULL == freq) { printf("error: freq is NULL\n"); return; } for (int i = 0; i < cnt; i++) printf("%c\t%d\n", freq[i].alpha, freq[i].freq); } //获取字符串str中字符出现的频度 FREQ *getFreq(char *str, int *cnt) { FREQ *frp = NULL; int count = 0; int zf[128] = { 0 }; int i, t; if (NULL == str || NULL == cnt) { printf("error: str || cnt is NULL\n"); return NULL; } /* 直接通过字符的ASCII码 作为数组的下标 这里计算的是同一种字符出现的次数 */ for (i = 0; str[i]; i++) { zf[str[i]]++;//例如"AAA"那么 zf[65]++ 达到3 //如果是A的话,zf[A]即是zf[65]++ } /* 这里计算的是字符的和种类 */ for (i = 0; i < 128; i++) { //如果zf[i]不等于0的话,说明有这个字符的出现, //这样就可以计算出字符的种类了 if (zf[i]) count++; } if( frp = (FREQ *)malloc(sizeof(FREQ)* count)) for (i = t = 0; i < 128; i++) { if (zf[i]) { frp[t].alpha = i; //当前字符 frp[t++].freq = zf[i]; //当前字符频度 } } *cnt = count; return frp; } void main() { char str[80]; FREQ *freqp; int cnt; //统计字符种类 puts("输入一个字符串:"); gets(str); freqp = getFreq(str, &cnt); showFreq(freqp, cnt); if (freqp) free(freqp); system("pause"); }
相关文章推荐
- 统计输入的字符串各个不同字符出现的频度,并存入文件,合法字符为:“A~Z”和“0~9”
- 统计输入字符串中各不同字符出现的频度
- c++第二周任务三:/*(3‐1)输入一行字符,统计其中有多少个单词
- C++第16周项目1(1)统计字符串/字符数组
- 笨方法实现字符串中字符频度的统计
- c++面试题之 找出字符串中第一个只出现一次的字符
- 编写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其它字符的个数,在主函数中输入字符串以及输出上述结果。 只要结果,别输出什么提示信息。
- C++实现分类统计字符串中字符个数
- 输入一个字符串内有数字和非数字字符,将连续的数字作为一个整数,存到数组a中,统计整数的个数,并输出这些数
- 15. Google面试题:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b
- 《任意输入一个合理大小的字符串,实现逆序输出并统计一个字符串中字母、数字、空格及其他字符的个数》
- 输入字符串统计每个字符出现的个数
- 面试题:输入字符串,字符个数,输出拆分结果
- C++如何输入含有空格字符的字符串
- 统计字符串中各字符出现的频度
- C++统计字符串中的小字符串个数
- C++输入一个字符串,把其中的字符按照逆序输出的两种方法
- C++输入一个字符串,把其中的字符按照逆序输出的两种方法解析
- c++中统计输入字符的个数经典代码
- 学习C/C++语言:字符数组的使用,统计字符串中单词个数