700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 编写一函数 由实参传来一个字符串 统计此字符串中字母 数字 空格和其它字符的个数

编写一函数 由实参传来一个字符串 统计此字符串中字母 数字 空格和其它字符的个数

时间:2018-07-10 20:11:54

相关推荐

编写一函数 由实参传来一个字符串 统计此字符串中字母 数字 空格和其它字符的个数

知识点:函数的调用和字符数组的运用。

字符数组是指用来存放字符数据的数组。其定义的一般形式为: char 数组名[数据长度] 。字符数组用于存放字符或字符串,字符数组中的一个元素存放一个字符,它在内存中占用一个字节。

在做这题时,需要思考一下。从实参传入字符串到形参进行统计,形参统计字符的数量时会用到循环,但我们输入的字符串是随机的,并没有准确的量。

另外循环中给定的条件,必须要达到条件满足时才可停止。举个例子,假设循环结束条件是 i<=10,我们在输入字符时需得输入十个或十个以上才会停止输入进行统计,因此这样会非常局限。

提到这个问题后,我们今天就讲述一下字符串的串结束标志

定义

字符串和字符串结束标志

在C语言中,是将字符串作为字符数组来处理的。为了测定字符串的实际长度,C语言规定了一个“字符串结束标志”,以字符’\0’作为结束标志

简而言之,在每个字符串结束后计算机会自动添加结束标志,来判定此字符串已经结束。

细心的同学可能已经发现解决循环统计的问题了,将串结束标志作为循环结束条件,当字符数组中输出的元素等于串结束标志,那么此循环便会结束。是不是就达到了我们随机输入效果了。

for (int i = 0; a[i]!='\0'; i++)

陈述:由主函数输入一串字符,通过调用函数统计其中字母、数字等的个数。

分析:

创建统计字符串个数函数。定义要统计的变量名,分别赋初值为 0 。利用循环输出由主函数输入的字符串,并进行判断输出元素是否字母,如果是,字母变量++(自增,加一)。对需要统计的类型依次进行判断,最后输出。

void statistical(char a[]){int letter = 0;int number = 0;int space = 0;int other = 0;for (int i = 0; a[i]!='\0'; i++){if ((a[i] >= 'a' && a[i] <= 'z') || (a[i] >= 'A' && a[i] <= 'Z'))letter++;else if (a[i] >= '0' && a[i] <= '9')number++;else if (a[i] == ' ')space++;elseother++;}cout << "字母的个数有:" << letter << endl;;cout << "数字的个数有:" << number << endl;cout << "空格的个数有:" << space<<endl;cout << "其他个数有:" << other << endl;}

进行到这里,我们简单讲一下关于从主函数输入字符串的问题。

同学们熟悉c和c++中的输入是 scanf 和 cin ,但这两个函数输入字符串时存在一个问题,就是如果输入了空格会认为字符串结束,空格后的字符将作为下一个输入项处理,。

针对此问题,我们可以引入 cin.getline 和 gets 函数输入 。

cin.getline

此函数会一次读取多个字符(包括空白字符)。它以指定的地址为存放第一个读取的字符的位置,依次向后存放读取的字符,直到读满N-1个,或者遇到指定的结束符为止。若不指定结束符,则默认结束符为换行符,此函数并不保留结束符,它通过结束符确定结束,但不保存结束符,它用空字符来替换结束符。其语法为:

cin.getline( 字符数组变量名,字符数组元素的个数,结束符)。

为char a[10]输入元素,cingetline(a,10,’\n’)。

gets

gets从标准输入设备读字符串函数,其可以无限读取,不会判断上限,以回车结束读取,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。

语法:gets(字符串变量名)

为char a[10]输入元素,gets(a)。

gets()函数用来从标准输入设备(键盘)读取字符串直到换行符结束,但换行符会被丢弃,然后在末尾添加’\0’字符。

gets函数与cin.getline函数相似,同学们可以先记住用法,关于具体表现的作用可以去查阅资料。

代码演示

#include<iostream>using namespace std;#define N 50void statistical(char a[]){int letter = 0;int number = 0;int space = 0;int other = 0;for (int i = 0; a[i]!='\0'; i++){if ((a[i] >= 'a' && a[i] <= 'z') || (a[i] >= 'A' && a[i] <= 'Z'))letter++;else if (a[i] >= '0' && a[i] <= '9')number++;else if (a[i] == ' ')space++;elseother++;}cout << "字母的个数有:" << letter << endl;;cout << "数字的个数有:" << number << endl;cout << "空格的个数有:" << space<<endl;cout << "其他个数有:" << other << endl;}int main(){char a[N];cout << "Please enter a string of characters: " << endl;//gets_s(a);//vs不支持gets,需要在后面加上_scin.getline(a, N,'\n');statistical(a);return 0;}

编写一函数 由实参传来一个字符串 统计此字符串中字母 数字 空格和其它字符的个数 在主函数中输入字符串以及输出上述的结果。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。