本篇文章主要介绍了"找出字符串中出现频率最少的字符,并将其去除",主要涉及到方面的内容,对于C/C++jrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播感兴趣的同学可以参考一下:
好像是前段时间笔试什么公司的时候遇到的笔试题。记不太清楚了,似乎当晚回来就写了个比较完整的版本,不过现在才想起来写个小笔记。唉,现在找工作难啊,没相关的项目经验...
好像是前段时间笔试什么公司的时候遇到的笔试题。记不太清楚了,似乎当晚回来就写了个比较完整的版本,不过现在才想起来写个小笔记。
唉,现在找工作难啊,没相关的项目经验和实习经验,应届毕业生,非名校,你就已经被判了死刑了有木有!不要说你基础好啊!肯受苦啊!勤学奋进啊!爱加班哪!没人鸟你啊!伤不起啊有木有~
好吧,吐个小槽,回来说说题目本身:
想法是这样的,假设字符串只有英文。那就简单了,ASCII表查起。查看可知,小写字母对应的十进制范围是97到122,大写字母对应十进制65到90 。那我统计的时候判断条件就是它们对应的十进制了,小写字母统计数值放一个数组,大写字母统计数放一个数组,然后统一到一个数组。
数组只需要创建大小为26 。因为这边简化了问题,假设是只有英文字母。
觉得写的代码还是比较直观易懂的,就不多废话了。
/*程序功能描述:找出字符串中出现频率最小的字母,并将其去除;
Author:NerohHwang;
Date:10/9/2013 Wednesday;
*/#include#include<string.h>
usingnamespace std;
int main()
{
char * Str = "dhajkhfkablcjnakjyhrweuipqhydhjasbvfjhlksdabklfjhslkMm";
//下面两个数组对照小写和大写,最后统一到一个数组中int iArrSmall[26];
int iArrBig[26];
int iSum[26];
//统计for (int i = 0; i < 26; i ++)
{
iArrSmall[i] = iArrBig[i] = 0; //全部初始化为0
}
for(int i = 0; i < strlen(Str); i++)
{
if (Str[i] > 96 && Str[i] < 123) //如果是比96大,即是属于小写字母范围;当然,不能超过小写z的范围 {
iArrSmall[Str[i]-97]++;
}
elseif (Str[i] <= 90 && Str[i] > 64) //大写字母范围 {
iArrBig[Str[i]-65]++;
}
else {
cout<<"Invalid letter!"<<endl;
system("pause");
exit(1);
}
}
for (int i = 0; i < 26 ; ++i)
{
iSum[i] = iArrBig[i] + iArrSmall[i];
}
//下面对统计结果进行选择,直接挑出最小的那一项即可,统计数需大于零,即该字母必须出现过int iSmallestIndex = iSum[0];
for (int i = 1; i < 26; ++i)
{
if (iSmallestIndex > iSum[i] && iSum[i] > 0)
{
iSmallestIndex = i;
}
}
cout<<"The smallest letter is "<<char(iSmallestIndex+97)<<" or "<<char(iSmallestIndex+65)<<endl;
cout<<"There are "<<>" of them"<<endl;
//更新数据char strNew[256];
int index = 0;
for (int i = 0; i < strlen(Str) ; i++)
{
if (int(Str[i]) != (iSmallestIndex+97) && int(Str[i]) != (iSmallestIndex+65))
{
strNew[index] = Str[i];
index++;
}
}
strNew[index+1] = '\0';
cout<<>endl;
cout<<>endl;
//地址重新赋值,覆盖原数据 Str = strNew;
cout<<>endl;
return0;
}
以上就介绍了找出字符串中出现频率最少的字符,并将其去除,包括了方面的内容,希望对C/C++jrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播有兴趣的朋友有所帮助。
本文网址链接:http://www.codes51.com/article/detail_247092.html