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

一个小程序不懂,该如何处理

2012-03-02 
一个小程序不懂#includestdio.hint main(){int i,count[26]char buf[100]printf(请输入一行字符:\n)

一个小程序不懂
#include<stdio.h>
int main()
{
int i,count[26];
char buf[100];
printf("请输入一行字符:\n");
gets(buf);
for(i=0;i<26;i++)
count[i]=0;
if(buf[i]>='A'&&buf[i]<='Z')
buf[i+26]=buf[i];
while (buf[i]>='a'&&buf[i]<='z')
count[buf[i]]++;
for(i=0;i<26;i++)
if(count[i])
printf("%c(%d)\t",i,count[i]);
printf("\n");
return 0;
}

题目是输入一行字符,记录字母出现的次数,不分大小写

[解决办法]

C/C++ code
/*输入一行字符,记录字母出现的次数,不分大小写*/#include<stdio.h>#include<string.h> int main(){    int i,count[26];    char buf[100];    char temp;        printf("请输入一行字符:\n");    gets(buf); //输入        for(i=0;i<26;i++)    {            count[i]=0;    }        for(i = 0; i < strlen(buf); i++)    {        if(buf[i]>='A' && buf[i]<='Z') //统计大写字母         {                temp = buf[i];            count[temp - 65]++;        }                if(buf[i]>='a' && buf[i]<='z') //统计小写字母         {                temp = buf[i];            count[temp - 97]++;        }            }        for(i=0;i<26;i++)    {            if(count[i])        {            printf("%c %c(%d)\n",i+65,i+97,count[i]);        }    }    printf("\n");    return 0;}
[解决办法]
在楼主代码的基础上做了修改.
C/C++ code
#include<stdio.h>#include<ctype.h>/*输入一行字符,记录字母出现的次数,不分大小写*/int main(){    int i, count[26];    char buf[100];    char ch;    printf("请输入一行字符:\n");    gets(buf);    printf("buf=%s\n", buf);    for(i=0;i<26;i++) {  //初始化字母计数数组        count[i]=0;    }    i = 0;    while(buf[i] != '\0') {        if(buf[i]>='A'&&buf[i]<='Z') {            buf[i]=buf[i] + 32;  /*将大写字母变为对应的小写字母, ascii码相差32*/            //buf[i+26]=buf[i];        }        i++;    }    printf("buf=%s\n", buf);        i = 0;    //while (buf[i]>='a'&&buf[i]<='z')    while(buf[i] != '\0') {        count[buf[i]-'a']++;        i++;    }    ch = 'a';  /*用于输出对应统计的字符*/    for(i=0;i<26; i++, ch++) {        if(count[i]) {            printf("%c(%d)\t", ch, count[i]);            //printf("%c(%d)\t",i,count[i]);        }    }    printf("\n");    return 0;}
[解决办法]
这个程序有问题,我用c++实现了下,运行ok
#include<stdio.h>
#include<iostream>
#include<string>
using namespace std;
int main()
{
int count[26];
string buf;
cout<<"请输入一行字符"<<endl;
cin>>buf;
for(int i=0;i<26;i++)
count[i]=0;
for(string::size_type si=0;si!=buf.size();si++)
{
if(buf[si]>='A'&&buf[si]<='Z')
count[static_cast<int>(buf[si])-65]++;
if(buf[si]>='a'&&buf[si]<='z')
count[static_cast<int>(buf[si])-97]++;
}
for(int i=0;i<26;i++)
{
if(count[i])
{
char c=static_cast<char>(i+65);
cout<< c << count[i]<<endl;
}
}
system("pause");
return 0;
}
[解决办法]
程序有问题,稍微修改了下。
int main()
{
int i, j, count[26];
char buf[100];

printf("请输入一行字符:\n");
gets(buf);

for(i=0;i<26;i++)
count[i]=0;


for (j = 0; j < strlen(buf); j++)
{
if (buf[j] >= 'a' && buf[j] <= 'z')


{
count[buf[j] - 'a']++;
}

if (buf[j] >= 'A' && buf[j] <= 'Z')
{
count[buf[j] - 'A']++;
}
}


for(i=0;i<26;i++)
{
if(count[i])
printf("%c(%d)\t",'a' + i,count[i]);

}
printf("\n");
return 0;
}
[解决办法]
你的for循环没有规定范围,而且while是个死循环,程序肯定是跑不出来的。而且你的count[]超出了定义。
如果不区分大小写的话:
#include<stdio.h>
int main()
{
int i,count[26];
char buf[100];
printf("块︽才:\n");
gets(buf);
for(i=0;i<26;i++)
{
count[i]=0;
}
for(i=0;i<100;i++)
{
if(buf[i]>='A'&&buf[i]<='Z')
count[buf[i]-65]++;
if(buf[i]>='a'&&buf[i]<='z')
count[buf[i]-97]++;
}
for(i=0;i<26;i++)
{
if(count[i])
printf("%c(%d)\t",i+97,count[i]);
}
return 0;
}
[解决办法]

C/C++ code
#include<stdio.h>#include "string.h"int main(){    int i,count[25];    char buf[100];    printf("请输入一行字符:\n");    gets(buf);        for(i=0;i<25;i++)        count[i]=0;    for(i=0;i<100;i++)        while (buf[i]>='A'&&buf[i]<='Z')             buf[i]+=32;//不是buf[i+26]=buf[i],因为标准C中,大小写字母相差32而不是26                       //而且楼主的用法会改变输入数据的值···    for(i=0;i<100;i++)        ++count[buf[i]-'a'];//开始计数。注意字母在标准C中的值不是从1开始    for(i=0;i<25;i++)        if(count[i])            printf("%c(%d)\t",i+'a',count[i]);    return 0;    }
[解决办法]
#include<stdio.h>
int main()
{
int i=0;
char buf[100];
int count[255]={0};//对应字母的个数,初始化为0
printf("请输入一行字符:\n");
gets(buf);

while(buf[i])//对数组buf中的所有字母计数
{
count[buf[i]]++;//对应字母计数,若buf[i]=a,a对应ASCII为65,故count[65]++
i++;
}

for(i=0;i<255;i++)//输出
if(count[i])
printf("%c(%d)\t",i,count[i]);

printf("\n");
return 0;
}

热点排行
Bad Request.