crivit为什么这么便宜:编一个程序,C语言高手进
来源:百度文库 编辑:高校问答 时间:2024/05/04 23:44:04
应该怎么编,我是新手啊,不是很懂,希望编简单一点
最好加上解释 谢了啊
/* 不区分字母大小写(把大写都当成小写)*/
#include <stdio.h>
#include <ctype.h>
void main( ) {
static c, count[ 26 ]; /* 注 1 */
while ( ( c = getchar( ) ) != '\n' ) /* 注 2 */
if ( isalpha( c ) )
count[ tolower( c ) - 'a' ]++; /* 注 3 */
for ( c = 'a'; c <= 'z'; c++ ) /* 注 4 */
printf( "%c=%d\t", c, count[ c - 'a' ] ); /* 注 5 */
}
/*
注:
1)这句等于 static int c, count[ 26 ]; ,因为声明变量时 int 是默认类型。
这里用 static(静态)是为了要免去写初始化 count 数组的代码
(声明静态变量时若不赋值, 编译器会自动赋初值 0 )。
count[ 0 ] 是 'a' 的个数,count[ 1 ] 是 'b' 的个数。。。(以此类推)
2)逐一读取标准输入(一般是键盘输入)的字符,直到碰上回车为止。
3)tolower( c ) - 'a' 这个表达式所产生的值的可能范围是 0 至 25,
因为前一行的 if ( isalpha( c ) ) 确保执行这一句时,c 必定是字母,
因此 tolower( c ) 返回的必定是小写字母。
这意味着若 c 的值是 'a' 或 'A', tolower( c ) - 'a' 即等于 'a' - 'a',
即是 0 ,所以 count[ tolower( c ) - 'a' ]++ 即等于 count[ 0 ]++ ,
达到了把 'a'(或 'A')的个数自增的效果。
这样的安排简洁地使每一个前来报到的字母“对号入座”。
4)让 c 遍历 'a' 至 'z' 的代码可以这样写。
5)有了前面的注释,这行你肯定看得懂。
*/
字母大小写有区别么?以下程序是假设不区别:
#include "stdio.h"
void main()
{
int num[26];
for(int i=0;i<26;i++) num[i]=0;
char str[81] ,*p=str;
gets(str);
while(*p)
{
if (*p>='a' && *p<='z')
{
num[*p-'a']++;
}
else if(*p>='A' && *p<='Z')
{
num[*p-'A']++;
}
p++;
}
for(i=0;i<26;i++)
{
printf("%c:%d\n",i+'a',num[i]);
}
}
#include<stdio.h>
#define N 100
comp(int i,int b[])
{
int n;
for(n=0;b[n]!='\0';n++)
if(i==b[n]) return 0;
return 1;
}
main()
{
char a[N];
int cout,i,j,b[N],k=0;
gets(a);
for(i=0;a[i]!='\0';i++)
{
cout=1;
for(j=i+1;a[j]!='\0';j++)
{
if(a[i]==a[j])
{ cout++;
b[k]=j;
k++;
}
}
if(comp(i,b))
printf("the No.of %c=%d\n",a[i],cout);
}
}
#include "string.h"
#include "stdio.h"
strle(char a[])
{int num=0,n=0;
while(*(a+num)!='\0') num++;/*num是字母个数,每过一个加一下 直到
遇见\0 */
return (num);}
main()
{ char str1[81],*p1=str1;
gets(p1); /*得到字符串*/
printf("%d\n",strle(p1)); }
输入一个字母可得个数 多个的你想要怎么写?我QQ270949272
看错题了,是统计每个字母的个数,tanyuguo的程序很好,用他的吧
tanyuguo挺厉害的