统计字母的使用频率 5
为统计英文字母的使用频率,输入一个不包括空格的由英文字母组成的字符串,长度不超过200个字符。统计26个英文字母的使用频率,不区分大小写。最后按使用频率从大到小输出字母(...
为统计英文字母的使用频率,输入一个不包括空格的由英文字母组成的字符串,长度不超过200个字符。统计26个英文字母的使用频率,不区分大小写。最后按使用频率从大到小输出字母(小写字母)和使用频率(出现的次数)。
3. 问题的解决方案
按照程序要求,本程序应采用模块化设计方法,设计几个功能模块。例如(仅供参考):
l 将字符串中的大写字母转换为小写字母
l 统计输入的字符串中字母的使用频率
l 按使用频率从大到小进行排序 展开
3. 问题的解决方案
按照程序要求,本程序应采用模块化设计方法,设计几个功能模块。例如(仅供参考):
l 将字符串中的大写字母转换为小写字母
l 统计输入的字符串中字母的使用频率
l 按使用频率从大到小进行排序 展开
展开全部
#include <cstdlib>
#include <iostream>
using namespace std;
//定义一个结构体,ch表示字母,freq表示出现次数
typedef struct node
{
char ch;
int freq;
};
void lower(char *str);
void counter(char *str, int count[26]);
void sort(int count[26]);
int main(int argc, char *argv[])
{
cout<<"Please input the string \n";
char str[200];
cin>>str;
int length = strlen(str);
cout<<length<<endl;
lower(str);
cout<<str<<endl;
int count[26];
for(int i=0; i<26; i++)
count[i] = 0;
counter(str, count);
for (int i=0; i<26; i++)
{
cout<<char(i+'a')<<":"<<count[i]<<" ";
if (i%10 ==0 && i!=0) cout<<endl;
}
cout<<endl<<"After sort:"<<endl;
sort(count);
system("PAUSE");
return EXIT_SUCCESS;
}
//对字符串中大写字母进行转换
void lower(char *str)
{
for (int i=0; i<strlen(str); i++)
{
if (str[i]<= 'Z')
str[i] = str[i] + 'a' - 'A';
}
}
//统计字母出现的次数
//用字母的ASCII码与数组元素下标之间的关系来求得
//即下标 = 字母ASCII - ‘a’的ASCII码
void counter(char *str, int count[26])
{
int j ;
for (int i=0; i<strlen(str); i++)
{
if (str[i]<='z' && str[i]>='a')
{
j = str[i]-'a';
count[j]++;
}
}
}
//采用冒泡排序,对字符数组进行排序
//由于太久没有编程,对指针数组不熟,所以采用结构数组进行。
void sort(int count[26])
{
node count1[26];
for (int i=0; i<26; i++)
{
count1[i].ch = char(i+'a');
count1[i].freq = count[i];
}
node temp;
for (int i=0; i<26; i++)
for (int j=0; j<i; j++)
{
if (count1[j].freq <count1[j+1].freq)
{
temp.freq = count1[j].freq;
temp.ch = count1[j].ch;
count1[j].freq = count1[j+1].freq;
count1[j].ch = count1[j+1].ch;
count1[j+1].ch = temp.ch;
count1[j+1].freq = temp.freq;
}
}
for (int i=0; i<26; i++)
{
cout<<count1[i].ch<<":"<<count1[i].freq<<" ";
if (i%10 ==0 && i!=0) cout<<endl;
}
}
该程序在DEV C++上已经通过测试。如果还有其他问题请跟帖说明,我会继续关注这个帖子的。
#include <iostream>
using namespace std;
//定义一个结构体,ch表示字母,freq表示出现次数
typedef struct node
{
char ch;
int freq;
};
void lower(char *str);
void counter(char *str, int count[26]);
void sort(int count[26]);
int main(int argc, char *argv[])
{
cout<<"Please input the string \n";
char str[200];
cin>>str;
int length = strlen(str);
cout<<length<<endl;
lower(str);
cout<<str<<endl;
int count[26];
for(int i=0; i<26; i++)
count[i] = 0;
counter(str, count);
for (int i=0; i<26; i++)
{
cout<<char(i+'a')<<":"<<count[i]<<" ";
if (i%10 ==0 && i!=0) cout<<endl;
}
cout<<endl<<"After sort:"<<endl;
sort(count);
system("PAUSE");
return EXIT_SUCCESS;
}
//对字符串中大写字母进行转换
void lower(char *str)
{
for (int i=0; i<strlen(str); i++)
{
if (str[i]<= 'Z')
str[i] = str[i] + 'a' - 'A';
}
}
//统计字母出现的次数
//用字母的ASCII码与数组元素下标之间的关系来求得
//即下标 = 字母ASCII - ‘a’的ASCII码
void counter(char *str, int count[26])
{
int j ;
for (int i=0; i<strlen(str); i++)
{
if (str[i]<='z' && str[i]>='a')
{
j = str[i]-'a';
count[j]++;
}
}
}
//采用冒泡排序,对字符数组进行排序
//由于太久没有编程,对指针数组不熟,所以采用结构数组进行。
void sort(int count[26])
{
node count1[26];
for (int i=0; i<26; i++)
{
count1[i].ch = char(i+'a');
count1[i].freq = count[i];
}
node temp;
for (int i=0; i<26; i++)
for (int j=0; j<i; j++)
{
if (count1[j].freq <count1[j+1].freq)
{
temp.freq = count1[j].freq;
temp.ch = count1[j].ch;
count1[j].freq = count1[j+1].freq;
count1[j].ch = count1[j+1].ch;
count1[j+1].ch = temp.ch;
count1[j+1].freq = temp.freq;
}
}
for (int i=0; i<26; i++)
{
cout<<count1[i].ch<<":"<<count1[i].freq<<" ";
if (i%10 ==0 && i!=0) cout<<endl;
}
}
该程序在DEV C++上已经通过测试。如果还有其他问题请跟帖说明,我会继续关注这个帖子的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
瑞地测控
2024-08-12 广告
2024-08-12 广告
在苏州瑞地测控技术有限公司,我们深知频率同步与相位同步的重要性。频率同步确保两个或多个设备的时钟频率变化一致,但相位(即时间点)可保持相对固定差值。而相位同步,即时间同步,要求不仅频率一致,相位也必须完全一致,即时间差恒定为零。相位同步的精...
点击进入详情页
本回答由瑞地测控提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询