| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1171 人关注过本帖
标题:一个C语言的小问题,解决不了
只看楼主 加入收藏
shutyourhead
Rank: 1
等 级:新手上路
帖 子:52
专家分:2
注 册:2010-8-22
收藏
 问题点数:0 回复次数:12 
一个C语言的小问题,解决不了
程序本意是想把字符串中a,b,c,d,e,其他的字符出现的次数分别储存在b[0]~b[5]中。
但是定义的字符数组为10,所有的次数却是11。我估计是统计时连字符串后面的'\0'也给算上了,每次b[5]都多一个。不知道怎么改。求大侠帮忙
#include<stdio.h>
#include<string.h>
void fun(char a[],int b[])
{
int i;
for(i=0;i<6;i++)
b[i]=0;
for(i=0;i<strlen(a);i++)
switch(a[i])
{
case 'a':b[0]++;break;
case 'b':b[1]++;break;
case 'c':b[2]++;break;
case 'd':b[3]++;break;
case 'e':b[4]++;break;
default:b[5]++;
}
 printf("have %d 'a'\n",b[0]);
 printf("have %d 'b'\n",b[1]);
 printf("have %d 'c'\n",b[2]);
 printf("have %d 'd'\n",b[3]);
 printf("have %d 'e'\n",b[4]);
 printf("have %d other\n",b[5]);
}
main()
{
char a[10];
int b[6];
gets(a);
printf("the original data:\n");
puts(a);
fun(a,b); }
问题补充:就算我输入10个字符aabbccddee,结果还是会have 1 other.
搜索更多相关主题的帖子: C语言 
2010-08-24 17:38
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:0 
在default:b[5]++;后加一句printf("other is %d",a[i]);看一下就知道了是什么字符了(是字符的编码)

★★★★★为人民服务★★★★★
2010-08-24 18:09
jack10141
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:陕西西安
等 级:小飞侠
威 望:6
帖 子:706
专家分:2271
注 册:2010-8-10
收藏
得分:0 
测试过了 感觉有点怪异!

Coding就像一盒巧克力,你永远不会知道你会遇到什么BUG
别跟我说你是不能的,这让我愤怒,因为这侮辱了你的智慧
2010-08-24 18:09
erikyo
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:270
专家分:1154
注 册:2010-6-10
收藏
得分:0 
楼主用的什么编译器,vc表示没有你说的问题。
2010-08-24 18:11
shutyourhead
Rank: 1
等 级:新手上路
帖 子:52
专家分:2
注 册:2010-8-22
收藏
得分:0 
回复 2楼 cnfarer
还是不太明白。
2010-08-24 18:12
shutyourhead
Rank: 1
等 级:新手上路
帖 子:52
专家分:2
注 册:2010-8-22
收藏
得分:0 
回复 4楼 erikyo
TC2.0
2010-08-24 18:12
shutyourhead
Rank: 1
等 级:新手上路
帖 子:52
专家分:2
注 册:2010-8-22
收藏
得分:0 
以下是引用cnfarer在2010-8-24 18:09:16的发言:

在default:b[5]++;后加一句printf("other is %d",a);看一下就知道了是什么字符了(是字符的编码)
other is 2.为什么会这样?代码为2的字符很怪
2010-08-24 18:15
erikyo
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:270
专家分:1154
注 册:2010-6-10
收藏
得分:0 
好吧,TC不熟悉,VC里面没问题呢。可能就是编译器的问题了
2010-08-24 18:16
jack10141
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:陕西西安
等 级:小飞侠
威 望:6
帖 子:706
专家分:2271
注 册:2010-8-10
收藏
得分:0 
以下是引用shutyourhead在2010-8-24 17:38:26的发言:

程序本意是想把字符串中a,b,c,d,e,其他的字符出现的次数分别储存在b[0]~b[5]中。
但是定义的字符数组为10,所有的次数却是11。我估计是统计时连字符串后面的'\0'也给算上了,每次b[5]都多一个。不知道怎么改。求大侠帮忙
#include<stdio.h>
#include<string.h>
void fun(char a[],int b[])
{
int i;
for(i=0;i<6;i++)
b[i]=0;
for(i=0;i<strlen(a);i++)
switch(a[i])
{
case 'a':b[0]++;break;
case 'b':b[1]++;break;
case 'c':b[2]++;break;
case 'd':b[3]++;break;
case 'e':b[4]++;break;
default:b[5]++;
}
printf("have %d 'a'\n",b[0]);
printf("have %d 'b'\n",b[1]);
printf("have %d 'c'\n",b[2]);
printf("have %d 'd'\n",b[3]);
printf("have %d 'e'\n",b[4]);
printf("have %d other\n",b[5]);
}
main()
{
char a[10]; //char a[81];
int b[6];
gets(a);
printf("the original data:\n");
puts(a);
fun(a,b); }
明白了!你的字符数组a声明的太小!! 最好改为 a[81]

[ 本帖最后由 jack10141 于 2010-8-24 18:18 编辑 ]

Coding就像一盒巧克力,你永远不会知道你会遇到什么BUG
别跟我说你是不能的,这让我愤怒,因为这侮辱了你的智慧
2010-08-24 18:16
shutyourhead
Rank: 1
等 级:新手上路
帖 子:52
专家分:2
注 册:2010-8-22
收藏
得分:0 
以下是引用jack10141在2010-8-24 18:16:50的发言:

明白了!你的字符数组a声明的太小!! 最好改为 a[81]
为什么,我就只进行10个字符的判定不行吗?
2010-08-24 18:22
快速回复:一个C语言的小问题,解决不了
数据加载中...
 
   



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

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