| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 653 人关注过本帖
标题:我的这个字母使用频率的程序哪错了 求答案
只看楼主 加入收藏
hehe214
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-6-28
结帖率:0
收藏
已结贴  问题点数:10 回复次数:8 
我的这个字母使用频率的程序哪错了 求答案
#include <iostream>
using namespace std;

int a(int * r , char * str); //统计
void b(int * r , char * str, int l ); //显示, 可设置升序/降序

void c(int * r , int l )
{
cout<<"l="<<l <<endl;
cout<<"使用频率表:"<<endl;
for(int i=0;i<26; i++)
cout<<char('A'+i)<<":"<<r [i]<<endl;
}

void main()
{
cout<<"输入:";
char str[201];
cin>>str;
int r [26]; //统计26个字母出现频率 & initiate
int l =a(r ,str); //串长度(不含\0)
cout<<"已排序字符串: ";
b(r ,str,l );
c(r ,l );
}

int a(int * r , char * str)
{
int l =0;
for(int i=0;i<26;++i)
r [i]=0; for(i=0;str[i]!=0;++i)
{
//判断是否字母
//大写
if(str[i]>='A'&&str[i]<='Z')
//yes
 r[(str[i]-'A')]++; //指定字母频率表(出现次数)+1
//小写
if(str[i]>='a'&&str[i]<='z')
 r[(str[i]-'a')]++; //同上
//后续操作
 l++ ; //统计长度
}
return l ;
}
void b(int * r ,char * str, int l )
{
int t [26]; //临时, 存放已排序字母频率
for(int i=0;i<26;++i)
t [i]=0;
int s ; //操作寄存器
for(i=26;i>0; i--)
{
s =0;
for(int j=0;j<i; j++)
{
//获取目前最大的频率
if(r[s ]<r[j])
s =j;
}
if(r [s ]!=0)
{
//得到当前最大频率r [s ]
//显示该字母
for(j=0;j<l ; j++)
{
if(str[j]>='A'&&str[j]<='Z')
{
if(str[j]=='A'+s )
cout<<str[j];
}
if(str[j]>='a'&&str[j]<='z')
{
if(str[j]=='a'+s )
cout<<str[j];
}
}
}
r[s]=0;
}
cout<<endl;
}
 
搜索更多相关主题的帖子: 频率 字母 
2010-06-28 10:51
rainbow1
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:277
专家分:839
注 册:2010-5-19
收藏
得分:3 
#include <iostream>
using namespace std;

int a(int * r , char * str); //统计
void b(int * r , char * str, int l ); //显示, 可设置升序/降序

void c(int * r , int l )
{
    cout<<"l="<<l <<endl;
    cout<<"使用频率表:"<<endl;
    for(int i=0;i<26; i++)
    cout<<char('A'+i)<<":"<<r [i]<<endl;
}

int main()
{
    cout<<"输入:";
    char str[201];
    cin>>str;
    int r [26]; //统计26个字母出现频率 & initiate
    int l =a(r ,str); //串长度(不含\0)
    cout<<"已排序字符串: ";
    b(r ,str,l );
    c(r ,l );
    return 0;
}

int a(int * r , char * str)
{
    int l =0;
    for(int i=0;i<26;++i)
        r [i]=0;
    for(int i=0;str[i]!=0;++i)
    {
//判断是否字母
//大写
        if(str[i]>='A'&&str[i]<='Z')
//yes
        r[(str[i]-'A')]++; //指定字母频率表(出现次数)+1
//小写
        if(str[i]>='a'&&str[i]<='z')
        r[(str[i]-'a')]++; //同上
//后续操作
        l++ ; //统计长度
    }
    return l ;
}
void b(int * r ,char * str, int l )
{
    int t [26]; //临时, 存放已排序字母频率
    for(int i=0;i<26;++i)
        t [i]=0;
    int s ; //操作寄存器
    for(int i=26;i>0; i--)
    {
        s =0;
        for(int j=0;j<i; j++)
        {
//获取目前最大的频率
            if(r[s ]<r[j])
            s =j;
        }
        
        if(r [s ]!=0)
        {
//得到当前最大频率r [s ]
//显示该字母
            for(int j=0;j<l ; j++)
            {
                if(str[j]>='A'&&str[j]<='Z')
                {
                    if(str[j]=='A'+s )
                    cout<<str[j];
                }
                if(str[j]>='a'&&str[j]<='z')
                {
                    if(str[j]=='a'+s )
                    cout<<str[j];
                }
            }
        }
        r[s]=0;
    }
    cout<<endl;
}

注意标红的地方。
2010-06-28 12:38
hehe214
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-6-28
收藏
得分:0 
谢谢了
2010-06-28 14:22
hehe214
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-6-28
收藏
得分:0 
貌似还是不对
2010-06-28 16:31
rainbow1
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:277
专家分:839
注 册:2010-5-19
收藏
得分:0 
把调试错误信息贴出来,才好找出问题症结。
2010-06-28 18:25
方廷
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:47
专家分:176
注 册:2010-6-9
收藏
得分:3 
//错误主要在函数:void b(int *, char *, int);
#include <iostream>
using namespace std;
int a(int *, char *); //统计
void b(int *, char *, int); //显示, 可设置升序/降序
void c(int *, int);
void main()
{
    cout<<"输入:";
    char str[201];
    cin>>str;
    int r[26]; //统计26个字母出现频率 & initiate
    int l=a(r,str); //串长度(不含\0)
    cout<<"已排序字符串: ";
    b(r,str,l);
    c(r,l);
}
int a(int *r, char *str)
{
    int l=0;
    for(int i=0;i<26;++i)
        r[i]=0;
    for(i=0;str[i]!='\0';++i)//判断是否字母
    {
        if(str[i]>='A'&&str[i]<='Z')//大写
            r[str[i]-'A']++; //指定字母频率表(出现次数)+1            
        if(str[i]>='a'&&str[i]<='z')//小写
            r[str[i]-'a']++; //同上
        l++; //统计长度
    }
    return l;
}
void b(int *r,char *str, int l)
{
    int s ; //操作寄存器
    char ch;
    for(int i=l;i>0;i--)
    {
        s=0;
        for(int j=1;j<i; j++)
            if(str[s]<str[j])
                s=j;
        ch=str[s];
        str[s]=str[j-1];
        str[j-1]=ch;
        cout<<ch;
    }
    cout<<endl;
    s=0;
    for(i=1;i<26;i++)
        if(r[s]<r[i])
            s=i;
    cout<<"当前最大频率:"<<r[s]<<endl;
}
void c(int *r, int l)
{
    cout<<"l="<<l<<endl;
    cout<<"使用频率表:"<<endl;
    for(int i=0;i<26;i++)
    cout<<char('A'+i)<<":"<<r[i]<<endl;
}
2010-06-28 19:53
木剑
Rank: 1
等 级:新手上路
帖 子:3
专家分:3
注 册:2010-6-14
收藏
得分:3 
应该参数传递的不对
2010-06-28 21:48
hehe214
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-6-28
收藏
得分:0 
谢谢大家对我的帮助
2010-06-28 22:14
hehe214
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-6-28
收藏
得分:0 
终于对了 谢了 明天程序设计答辩终于有着落了
2010-06-29 09:00
快速回复:我的这个字母使用频率的程序哪错了 求答案
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032797 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved