| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 631 人关注过本帖
标题:C语言编程中碰到一个问题,求大神指教
只看楼主 加入收藏
Clytie
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2015-9-17
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:7 
C语言编程中碰到一个问题,求大神指教
统计字母的出现次数,将大写转化小写,再把次数从大到小排序
#include<stdio.h>
int main()
{
    char a[200];//a数组用来存储字符串
    int i,t,m;
    int sum1=0;//sum1用来计算各个字母出现的次数
    int b[26];//用来存储各个字母出现的次数
    char c[26]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
    char *d, n=0;//指针变量指向数组c
    d=c;
    for(i=0; a[i]!='\0'; i++)
        scanf("%c", &a[i]);//输入各个字符
    if(a[i]>='A'&&a[i]<='Z')
            a[i]+=32;//把字符全部变为小写的字母
    for(t=0; t<26; t++)
    {
    {
        for(i=0; a[i]!='\0'; i++)
            if(a[i]==c[t])
                sum1++;
    }
                b[t]=sum1;//计算出各个小写字母的次数
    }
    for(i=0; i<25; i++)
        for(t=0; t<25-i; t++)
            if(b[t]<b[t+1])
            {
                m=b[t];
                n=*d;
                b[t]=b[t+1];
                *d=*(d+1);
                b[t+1]=m;
                *(d+1)=n;

            }//将次数从大到小排序
    for(t=0; t<26; t++)
    {    printf("%c:%d", *(d+t), b[t]);
        printf("\n");
    }
    return 0;
}
2015-09-17 20:50
erty1001
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:331
专家分:1433
注 册:2014-8-31
收藏
得分:5 
简单说说:

    for(i=0; a[i]!='\0'; i++)
        scanf("%c", &a[i]);//输入各个字符

a[i]声明之后,未显示初始化,你用a[i]=='\0'的条件来判断输入结束,就是一个大问题
2015-09-17 20:57
Clytie
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2015-9-17
收藏
得分:0 
回复 2楼 erty1001
char a[200]={0};这样初始化以后都变成0了,根本不需要输入了,问题在哪?
2015-09-17 21:03
Clytie
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2015-9-17
收藏
得分:0 
回复 3楼 Clytie
我后面有for(i=0; a[i]!='\0'; i++)
        scanf("%c", &a[i]);
 所以不需要初始值。
我的这段代码的问题在于我一个一个敲进去字母最后回车不显示个数,一直都是可以回车的状态
2015-09-17 21:28
Clytie
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2015-9-17
收藏
得分:0 
回复 2楼 erty1001
我后面有for(i=0; a[i]!='\0'; i++)
        scanf("%c", &a[i]);
所以不需要初始值。
我的这段代码的问题在于我一个一个敲进去字母最后回车不显示个数,一直都是可以回车的状态
2015-09-17 21:33
小王KING
Rank: 2
等 级:论坛游民
威 望:1
帖 子:29
专家分:69
注 册:2015-9-9
收藏
得分:10 
#include<stdio.h>
int main()
{
    char a[200];//a数组用来存储字符串           
    int i,t,m;
    int sum1=0;//sum1用来计算各个字母出现的次数
    int b[26];//用来存储各个字母出现的次数
    char c[26]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
    char *d, n=0;//指针变量指向数组c
    d=c;
    for(i=0; a[i]!='\0'; i++)                                    //你是要接受一串随机不定数量的字符串的输入,有一个接受字符串输入函数可以解决,自己去找资料,我忘记函数是什么了
        scanf("%c", &a[i]);//输入各个字符                          
    if(a[i]>='A'&&a[i]<='Z')                              //你这一句if实在搞不懂,你既然要把字符串里的字符都改为小写,因该把这句话加到for循环里面呀,怎么会是单独存在的呢
            a[i]+=32;//把字符全部变为小写的字母
    for(t=0; t<26; t++)
    {                                                          //这里怎么会有两个大括号??????
    {
        for(i=0; a[i]!='\0'; i++)                                //这个语句的后面又少了个左大括号
            if(a[i]==c[t])
                sum1++;                                    
    }
                b[t]=sum1;//计算出各个小写字母的次数                   //这里的sum1在传递了值之后,需要重新初始化(也就是赋值0)
    }
    for(i=0; i<25; i++)
        for(t=0; t<25-i; t++)
            if(b[t]<b[t+1])
            {
                m=b[t];
                n=*d;
                b[t]=b[t+1];
                *d=*(d+1);
                b[t+1]=m;
                *(d+1)=n;

            }//将次数从大到小排序
    for(t=0; t<26; t++)
    {    printf("%c:%d", *(d+t), b[t]);
        printf("\n");
    }
    return 0;
}
你是不是抄代码,抄错了呀,看你指针和数组用的都没问题,确有这么多小错误,想不明白
2015-09-18 05:09
gold615
Rank: 2
等 级:论坛游民
帖 子:54
专家分:75
注 册:2014-6-7
收藏
得分:5 
//确实没有初始化吧
#include<stdio.h>
#include<stdlib.h>
main()
{
    char str[101];
    printf("input the string(not longer than 100):\n");
    gets(str);
    printf("the string is:\n");
    fflush(stdin);
    printf("%s\n",str);
    int i;
    int alp[26];
    for(i=0;i<26;i++)
    {
        alp[i]=0;
    }
    char *p=str;
    for(;*p!='\0';p++)
    {
        if(*p>='a'&&*p<='z')
        {
            alp[*p-'a']++;
            continue;
        }
        else if(*p>='A'&&*p<='Z')
        {
            *p=*p+32;
            alp[*p-'a']++;
            continue;
        }
        else
        {
            continue;
        }
    }
    for(i=0;i<26;i++)
    {
        int j;int k=0;
        for(j=1;j<26;j++)
        {
            if(alp[j]>alp[k])
            {
                k=j;
            }
        }
        if(alp[k]==0)break;
        printf("%c:%d\n",k+'a',alp[k]);
        alp[k]=0;
    }
}
2015-09-18 13:40
Clytie
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2015-9-17
收藏
得分:0 
回复 6楼 小王KING
谢谢你的点评,我会改进的
2015-09-18 14:54
快速回复:C语言编程中碰到一个问题,求大神指教
数据加载中...
 
   



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

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