题目要求:
编写程序,输入一个长度不超过40的字符串s,统计其中大写字母、小写字母、数字字符、空格及其其他字符的个数。
例如:输入:Ab c2:3dA A709 bM.c454>AA#66@6B,A
输出:8 5 11 3 6,
有好几个版本,如需要输入字符数的,不需要输入字符数的
c++是这样的,c++和c版本主要是输入输出的区别:
#include <iostream>
//#include<stdio.h>
//#include<string.h>
using namespace std;
int main(){
int dx = 0,xx = 0,sz = 0,qt = 0,kg = 0; //大写字母,小写字母,数字,空格,其它字符个数,初值为0。
int n=44; //字符数组最大的大小。
char* arr=new char[n+1]; //定义字符数组arr,包含n个字符,最后一位为空字符。
cout<<"输入字符串";
cin.get(arr,n);
int sum;
cout<<"输入实际字符个数";
cin>>sum;
for(int i=0;i<sum;i++){
if ('Z'>=arr[i]&&(arr[i]>='A'))
dx++;
else if (('z'>=arr[i])&&(arr[i]>='a'))
xx++;
else if (('9'>=arr[i])&&(arr[i]>='0'))
sz++;
else if(arr[i]==' ')
kg++;
else qt++;
}
cout<<dx<<' '<<xx<<' '<<sz<<' '<<kg<<' '<<qt;
return 0;
}
对于是否需要输入字符串长度(就是字符个数),可以采用strlen函数自动统计字符长度。用于循环是的限制,或者在for哪里for(i=0;arr[i]!='\0';i++)当arr为空是结束循环也行。
算法那一块的话没什么好说的,不过在输入哪里需要注意的是cin.get(arr,n)输入时可以包括空格,单单是cin遇到空格会停止的,
所以改进一下就是:这里是当arr[i]='\0'时停止循环,采用cin.get()函数输入
#include <iostream>
using namespace std;
int main(){
int dx = 0,xx = 0,sz = 0,qt = 0,kg = 0; //大写字母,小写字母,数字,空格,其它字符个数,初值为0。
int n=44; //字符数组最大的大小。
char* arr=new char[n+1]; //定义字符数组arr,包含n个字符,最后一位为空字符。
cout<<"输入字符串";
cin.get(arr,n);
for(int i=0;arr[i]!='\0';i++){
if ('Z'>=arr[i]&&(arr[i]>='A'))
dx++;
else if (('z'>=arr[i])&&(arr[i]>='a'))
xx++;
else if (('9'>=arr[i])&&(arr[i]>='0'))
sz++;
else if(arr[i]==' ')
kg++;
else qt++;
}
cout<<dx<<' '<<xx<<' '<<sz<<' '<<kg<<' '<<qt;
return 0;
}
c语言可以这样这里采用strlen统计字符串长度来结束循环,采用gets()输入字符串,
#include<stdio.h>
#include<string.h>
int main(){
int dx = 0,xx = 0,sz = 0,qt = 0,kg = 0; //大写字母,小写字母,数字,空格,其它字符个数,初值为0。
int n=40; //字符数组最大的大小。
char* arr=new char[n+1]; //定义字符数组arr,包含n个字符,最后一位为空字符。
gets(arr);
n = strlen(arr);//统计字符串大小
for(int i=0;i<n;i++){
if ('Z'>=arr[i]&&(arr[i]>='A'))//是否为大写
dx++;
else if (('z'>=arr[i])&&(arr[i]>='a'))//是否为小写
xx++;
else if (('9'>=arr[i])&&(arr[i]>='0')) //是否为数字
sz++;
else if(arr[i]==' ')//是否为空格
kg++;
else qt++;//其他字符
}
printf("%d %d %d %d %d",dx,xx,sz,kg,qt);
return 0;
}
总体难度可能就是输入那里和循环的问题,思路就是输入一个字符串,然后从字符串第一个字符开始判断字符类型,对应类型数加1,