首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

c语言提问解决方法

2012-12-31 
c语言提问大家好,我是一位计算机专业的大一新生,劳烦给看看这段程序有何错误,谢谢。#includestdio.hint m

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可能好看些

热点排行