(2)事实上,由于审题失误,我所编写的这个程序,能够对一切情况进行处理(个人认为这个程序能够实现题目的要求,所以不能算错),单词之间可以有多个非字母字符,可以有空格,开头也可以有各种字符,唯一不足的是无法将The和the识别为同一单词:
3.问题分析:这道题较难,再加上审题的失误导致我在这道题上做了更多的工作。可能办法有点笨,但没有深入思考,所以最终程序较为麻烦。从我最终编写的程序来看,能够实现对各种输入情况下单词数的统计,实现这一功能主要问题在以下几点:
首先说明程序的思路:
输入一个含有各种字符的字符串,然后将其中的每一个单词依次挑选出来同时将其储存在用结构体定义好的一组字符串中;然后将这些单词中不同的单词挑出来存到另一二元结构体{单词,频率}的每一项的“单词”元素中;然后对二元结构体根据“单词”元素进行排序;然后根据每个“单词”元素在原来储存的所有单词中的出现次数得到频率并且同时将频率值保存到“频率”元素中并输出。
(1)单词的分离过程,这应该是其中几乎最麻烦的过程。由于要将每个单词识别出来,分开并且储存下来所以要定义一系列的字符串用于存储每个单词,为此定义了结构体: struct w
{
char a[20]; }in[100];
然后需要判断单词。从第一个字符开始,遇到字母后开始将原字符串的字符录入到单词字符串,遇到不是字母的字符时停止,给末尾加上’\\0’后这一单词的录入便完成,然后从这个非字母字符开始在往下判断,遇到下一个字母也就是下一个单词的首字母时子进行下一个单词的录入,直到完成所有录入。
完成以上工作之后,为了进行下一步的统计频率,还需要将其中不同的单词挑出来然后存储到二元结构体的Word元素中,为此进行如下操作:
从第一个单词开始,逐个判断它是不是与前面所有单词都不相同,若是,则将其存储下来,否则不存储。为此用了库函数strcmp进行两个字符串之间的比较。
(2)排序:这一环节比较简单,完全可以仿照作业第二题的方法; (3)频率统计:将存储下来的不同单词依次在所有单词中找出与之相同的个数即可,由于之前已经完成,故可以在记录频率同时输出结果。
(4)不足:用到库函数strcmp时,程序有警告,但可以运行,至于警告的原因,尚不清楚。
(七)第七题: 7、(必做题)任意输入一个正整数,统计输出各个数位上数字出现的次数。例如输入312366060,输出0为2;1为1;2为1;3为2;6为3。 1.源程序代码:
#include
int m;//数字 int n;//频率 };
int main() {
int x;//输入的数
cout<<\请输入整数:\; cin>>x;
int a,i,j,k,s=x;//s初始为输入值,后逐渐缩小,用于求解位数;a得到的是位数
for(a=0;s>0;a++) s=s/10;
int *num=new int[a]; for(i=0,s=x;i
*(num+i)=s; s=s/10; }
frequency fre[10]; for(j=0;j<=9;j++) {
k=0;
for(i=0;i<=a;i++) {
if(j==num[i]) k++; }
fre[j].n=k; fre[j].m=j; }
cout<<\统计结果如下:\\n\; for(j=0;j<10;j++) {
if(fre[j].n!=0)
cout< return 0; } 2.实验结果: (1)开头不是0: 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库西安交大C++程序设计第四章作业2(4)在线全文阅读。
相关推荐: