读书人

c语言提问解决方法

发布时间: 2012-12-31 11:57:52 作者: rapoo

c语言提问
大家好,我是一位计算机专业的大一新生,劳烦给看看这段程序有何错误,谢谢。

#include<stdio.h>
int main()
{
char a[1001]w[26];
int b[26]={0},i,j,t;
scanf("%s",a);
for(i=0;a[i]!='\0';i++)
for(j=97;j<=122;j++)
if(a[i]==j)b[j-97]++;
for(i=97;i<=122;i++)
w[i-97]=i;
for(i=0;i<25;i++)
if(b[i]>b[i+1])
{
t=w[i];
w[i]=w[i+1];
w[i+1]=t;
}
printf("%c\n",w[25]);
return 0;
}
我是想输入一个字符串,输出这个串中个数最多的字母,比如输入aaaaaaaaabbbbz,输出a。但这个程序总输出z.
[解决办法]

#include<stdio.h>

int main(void)
{
char a[1001], w[26];
int b[26] = {0}, i, j, t;

scanf("%s", a);

/* 统计字符串数组a中'a'-'z'字母的个数存入数组b */
for(i=0; a[i]!='\0'; i++)
for(j=97; j<=122; j++) /* j: ['a'-'z'] */
if(a[i]==j) b[j-97]++; /* b中统计'a'-'z'的个数 */

for(i=97; i<=122; i++)
w[i-97] = i;

/* 按字母的数字个数从小到大排序??? */
for(i=0; i<25; i++)
{
if(b[i]>b[i+1])
{
t=w[i];
w[i]=w[i+1];
w[i+1]=t;
}
}

/* 输出出现次数最多的字母??? */
printf("%c\n",w[25]);

return 0;
}


不知道lz的程序是不是注释里描述的意图?如果是,那么带???的for循环的排序有问题.
学习一下排序的算法.大学里是不是用谭浩强的教材,如果是,书上好象有个冒泡排序的代码.
这里稍微有点不一样,参考自己修改一下.
[解决办法]
楼主,代码风格一定要注意,这种代码的阅读性实在不高,中括号一定要加,即使是只有一条语句,代码风格养成很有好处
[解决办法]
#include<stdio.h>

int main(void)
{
char a[1001], w[26];
int b[26] = {0}, i, j, t;

printf("输入待检查的字符串\n");
scanf("%s", a);

/* 统计字符串数组a中'a'-'z'字母的个数存入数组b */

for(i=0; a[i]!='\0'; i++){

for(j=0; j<=25; j++){
/* j: ['a'-'z'] */
if(a[i]==('a'+j)){
b[j]++; /* b中统计'a'-'z'的个数 */
break;
}
elsecontinue;
}
}
/* 按字母的数字个数从小到大排序??? */
int tag = 0;
t = b[0];
for(i=0; i<25; i++)
{
if(t>=b[i])continue;
else {
t = b[i];
tag = i;
}
}

/* 输出出现次数最多的字母??? */
printf("%c\n",'a'+tag);

return 0;
}
楼主注意第一重for循环的问题比较大,还有第二个for循环,根本就没有任何作用,上述更改后的代码希望能对你有用
[解决办法]
补充一下,上述通过VC6改的,格式不太好看,通过vs可能好看些

读书人网 >C++

热点推荐