| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1964 人关注过本帖
标题:统计各个数字,空白符,以及其他字符出现的次数
只看楼主 加入收藏
stanlc
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2013-11-5
结帖率:50%
收藏
 问题点数:0 回复次数:5 
统计各个数字,空白符,以及其他字符出现的次数
#include <stdio.h>

int main(void)
{
  int c,i,nwhite,nother;
  int ndigit[10];

  nwhite = nother = 0;
  
  for(i = 0; i < 10; ++i)
  {
    ndigit[i] = 0;

    while((c = getchar()) != EOF)
        if(c >= '0' && c <= '9')
            ++ndigit[c - '0'];
        else if(c ==' ' ||c == '\n' || c == '\t')
            ++nwhite;
        else
            ++nother;
        printf("digits = ");
            for( i = 0; i < 10; ++i)
                printf("%d",ndigit[i]);
                printf( ", white space = %d, other = %d/n", nwhite,nother);
  }
  return 0;
}

结果出现乱码。。数字次数不对 其他都对的

[ 本帖最后由 stanlc 于 2013-11-5 22:43 编辑 ]
搜索更多相关主题的帖子: 统计 include 
2013-11-05 22:41
南国神画
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:51
专家分:124
注 册:2013-10-24
收藏
得分:0 
程序代码:
#include<stdio.h>
#include<ctype.h>
int main(void)
{
    int c,i,nwhite,nother;
    int ndigit[10];
    nwhite = nother = 0;
    for(i = 0; i < 10; i++)
    {
        ndigit[i] = 0;
    }
    while((c = getchar()) != EOF){
        if(isdigit(c)){   //判断是否为数字;
            ndigit[c - '0']++;
        }
        else if(c ==' ' ||c == '\n' || c == '\t'){
            nwhite++;
        }  
        else{
            nother++;
        }
        if(c=='#')//以'#'符结束输入;
            break;
    }
    printf("digits =  \n");
    for( i = 0; i < 10; i++)
        printf("%d",ndigit[i]);
    printf( "white space = %d, other = %d\n", nwhite,nother);
    return 0;
}




这样写,其实代码的可读性比较差,而且还不太符合要求,我是在你的基础上改进得到的程序,你原来程序里的for循环括号有问题,而且判断是否为数字的方法也不对啊,其实这个程序你可以用switch语句写的,那样比较简洁,当然我改的这个也能实现相应的功能,只是在如何跳出循环处理的不好,需要输入一个字符结束输入。你感兴趣的话可以看看。
2013-11-06 00:54
pangshch
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:2
帖 子:443
专家分:1966
注 册:2013-4-9
收藏
得分:0 
程序代码:
你的代码不错,一点点小错误
我帮你标出来,你改了就可以了:

#include <stdio.h>     // 这一行应该是你没复上来.
int main(void)
{
  int c,i,nwhite,nother;
  int ndigit[10];

  nwhite = nother = 0;

 
  for(i = 0; i < 10; ++i)
  {                                 // 这个大括号不要
    ndigit[i] = 0;

    while((c = getchar()) != EOF)
        if(c >= '0' && c <= '9')
            ++ndigit[c - '0'];
        else if(c ==' ' ||c == '\n' || c == '\t')
            ++nwhite;
        else
            ++nother;
        printf("digits = ");
            for( i = 0; i < 10; ++i) 
                printf("%d",ndigit[i]); //  你这个输出最好有空隔,不然出来的数字都是连着的.  如" printf("%d  ",ndigit[i]);
                printf( ", white space = %d, other = %d/n", nwhite,nother);   // 你这个'/n'错了,应该改成 '\n'
  }     // 这个也不要
  return 0;
}
等你学到后面了再考虑2楼的代码.现在你的已经不错了.
2013-11-06 17:31
stanlc
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2013-11-5
收藏
得分:0 
回复 2楼 南国神画
嗯,确实数字查找方法错了
2013-11-06 22:44
stanlc
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2013-11-5
收藏
得分:0 
回复 3楼 pangshch
谢谢~已经解决了!
2013-11-06 22:45
南国神画
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:51
专家分:124
注 册:2013-10-24
收藏
得分:0 
回复 4楼 stanlc
抱歉,我那天说过之后就发现,是我错了,你那样也能判断是否为数字。。
2013-11-08 12:03
快速回复:统计各个数字,空白符,以及其他字符出现的次数
数据加载中...
 
   



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

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