一个小程序不懂
#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;
}
题目是输入一行字符,记录字母出现的次数,不分大小写
[解决办法]
/*输入一行字符,记录字母出现的次数,不分大小写*/#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;}
[解决办法]
在楼主代码的基础上做了修改.
#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;
}
[解决办法]
#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;
}