C语言的程序题!求高手速解决.有追加分!

问题如下:输入一行字符(包括数字字符,英文字符,特殊符号).完成功能:
1: 用数组元素作为计数器来统计数字字符的个数;
2: 用数组元素作为计数器来统计英文字符的个数;
3: 对其中的数字字符按由大到小的顺序输出.
要求:可以定义成函数或过程实现每一个功能,也可以编辑多个程序!!!

只要程序,无需/*.....*/ 说明!!!
找最简洁的程序给分!当然是要再必须可以运行的前提下!!所有分数都拿出来了!高收帮忙!!!!!!!!!!
2楼的 我不是要你教我ASCII码,这个谁不会吖!你就整没用的!

vc下编译通过赋运行图 地址:



#include char a; int b[2] = {0,0},x=0; char c[999];void sr(){ do { a = getchar(); if(a>='0' && a { b[0]++; c[x] = a; x++; } else if((a>='a' && a='A' && a b[1]++; } while(a != 10);}void pl(){ int i,j,k; for(i=0; i for(j=i; j { if(c[i] { k = c[j]; c[j] = c[i]; c[i] = k; } }}void sc(){ int i; printf("您输入的字符串中\n数字个数为: %d\n英文字符个数为: %d\n",b[0],b[1]); printf("其中数字排序后结果为:\n"); for(i=0; i { printf("%c ",c[i]); }}void main(){ sr(); pl(); sc();}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2006-12-04
#include "stdlib.h"
#include "string.h"
void chushi(int a[],int n)
{
int i;
for(i=0;i<n;i++)
{
a[i]=0;
}
}
int tongji(int b[],int n)
{
int i;
int sum=0;
for(i=0;i<n;i++)
sum+=b[i];
return sum;
}

main()
{
char str[80];
int shuzi[10];
int zimu[26];
int i,j;
char *p;
gets(str);
p=str;
chushi(shuzi,10);
chushi(zimu,26);
while(*p!='\0')
{
if(*p>='0'&&*p<='9')
shuzi[*p-'0']++;
if(*p>='a'&&*p<='z')
zimu[*p-'a']++;
if(*p>='A'&&*p<='Z')
zimu[*p-'A']++;
p++;
}
for(i=9;i>=0;i--)
{
if(shuzi[i]==0)
continue;
else
for(j=0;j<shuzi[i];j++)
printf("%d",i);
}
printf("\nshuzi\tzimu");
printf("\n%d\t%d",tongji(shuzi,10),tongji(zimu,26));
}
第2个回答  2006-12-04
不明白你是否是要分开统计每个组字出现的个数,比如有几个1,几个2,...

县按照这种理解来写吧:

====================分别统计=======================

//szString为输入的字符串
//nNumber为一个10个单元的数组,nNumber[0]为"0"的个数,nNumber[1]为"1"的个数,如此类推。。。
//返回值:所有出现数字的个数
int StatNumber(const char* szString, int* nNumber)
{
int nCount = 0;
for(int i = 0; i < 10; i++)
nNumber[i] = 0; //初始化所有个数为0

for( i = 0; i < strlen(szString); i++)
{
if(szString[i] >= '0' && szString[i] <= '9')
{
nNumber[szString[i] - '0']++; //对应单元的计数值增1
nCount++;//总计数增1
}
}

return nCount;
}

//szString为输入的字符串
//nChar为一个26个单元的数组,nChar[0]为"a"的个数,nChar[1]为"b"的个数,如此类推。。。
//注:这里不区分大小写,出现大写也统计在小写字符的对应数组单元中
//如果需要区分大小写,可以类似做些改动
int StatChar(const char* szString, int* nChar)
{
int nCount = 0;
for(int i = 0; i < 26; i++)
nChar[i] = 0; //初始化所有个数为0

for( i = 0; i < strlen(szString); i++)
{
if(szString[i] >= 'a' && szString[i] <= 'z')
{
nChar[szString[i] - 'a']++; //对应单元的计数值增1
nCount++;//总计数增1
}
else if(szString[i] >= 'A' && szString[i] <= 'Z')
{
nChar[szString[i] - 'A']++; //对应小写字符单元的计数值增1
nCount++; //总计数增1
}
}

return nCount;
}

main()
{
int nNumber[10];//统计数字个数的数组
int nChar[26]; //统计字母个数的数组
int nNumberCount, nCharCount;
int i,j;
char szString[256];

printf("请输入一个混合字符串:");
scanf("%s", szString);

//1:用数组元素作为计数器来统计数字字符的个数
nNumberCount = StatNumber(szString, nNumber);
if(nNumberCount > 0)
{
printf("一共出现了%d个数字,数字字符的个数统计如下:\n", nNumberCount);
for(i = 0; i < 10; i++)
printf("出现 %d 的个数为:%d\n", i, nNumber[i]);
}

//2: 用数组元素作为计数器来统计英文字符的个数;
nCharCount = StatChar(szString, nChar);
if(nCharCount > 0)
{
printf("一共出现了%d个字母,字母个数统计如下:\n", nCharCount);
for(i = 0; i < 26; i++)
printf("出现字母 %c 的个数为:%d\n", 'a' + i, nChar[i]);
}

//3: 对其中的数字字符按由大到小的顺序输出.
printf("所有数字字符的排列顺序为:\n");
for(i = 9; i >= 0; i--)
{
if(nNumber[i] > 0)//如果该数字有出现过,nNumber[i]表示出现的次数
{
for(j = 0; j < nNumber[i]; j++)//这里数字出现几次,就输出几个
printf("%d ", i);
}
}
}
第3个回答  2006-12-04
'a' - 'z'的值为 97 - 122
'A' - 'Z'的值为 65 - 90
'0' - '9'的值为 48 - 57
在这些值之外的是特殊字符,
比较,排列,就会得出来了。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网