C风格字符串
【c风格的字符串声明】
声明一个C风格字符串,使其内容为“ILove C++!”,代码如下:
charstr[]={‘I’,’’,’L’,’o’,’v’,’e’,’’,’C’,’+’,’+’,’!’,’’};
上述代码在声明数组时没有指定大小,这样,编译器就会自行计算决定数组的大小。对于C风格字符串的声明,推荐采用这种方式,免去了程序员自行计数的麻烦,如果由程序员指定的数组太小,编译器会报错,太大的话就浪费空间。但若在声明语句中无初始化表达式,则应该指出该字符数组的大小。
可以看出,存储一个字符串所需字节数比该串的字符数多1,如存储“Hello”,该串有5个字母,但C风格字符串需要6个字节。而且,上述声明方式看上去很麻烦,要一个字母一个字母地用单引号包裹起来,还要记着后面的’’,实际上,C++还提供了另一种声明C风格字符串的方法――使用字符串常量,如:
charstr[]=”ILove C++!”;
【字符数组的cin和cout】
仅仅由字符组成,但结尾不是’’的数组不是C风格字符串,如:
charstr[]={‘H’,’e’,’l’,’l’,’o’};
如此声明的str只能称为字符数组,空字符’’对C风格字符串十分重要,很多与之对应的处理函数和对象(包括cout和cin),都逐个处理C风格字符串的字符,直到遇到空字符为止,因此,对于“charstr[]={‘H’,’e’,’l’,’l’,’o’};”,cout在输出5个字符后,还会继续输出内存中后面字节的内容,直到遇到空字符为止,这时输出结果是不确定的,但由于内存中存在大量的空字节,所以这个过程应该可以很快停止。
可以将C风格字符串(甚至是普通的字符数组)当成一个整体来进行输入输出操作。
代码例子:
运行结果:
分析:
代码中声明了一个c风格字符串,大小为26个字节长度(25个字符加上一个空字符),并进行了初始化,“cout<<str<<endl;”将str作为标识,对c风格字符串进行了整体输出,“cin>>str”可以向c风格字符串中存入一个新的字符串,盖字符串的长度不能超过初始化时所开辟的内存空间长度字节数减1,因为还要留出一个字节存放空字符‘’,在例子中,重新输入“hello world!”(没有超过25个字符),但是为什么只有输出“hello”呢?
因为cin这个函数在进行输入操作的时候,会跳过前导空白,从第一个有效的字符开始读取,直到cin遇到一个空白字符才结束操作。
【get()函数和getline()函数】
那么如何将含空格的字符串读到C风格字符串中呢?这要用到istream类中提供的getline()和get()函数,两个函数都用于读入一行输入,直到遇到换行符,但getline()函数丢弃换行符,而get()函数也将换行符存入C风格字符串中,这里先介绍两个函数的用法。
代码示例:
运行结果:
在例子中,get()方法和getline()方法基本上差不多,有一个不同之处就是对回车换行符的处理。
get()方法是不提取换行符的。
getline()方法是提取出换行符,同时再抛弃掉换行符。
【访问c风格字符串中的某个元素】
C风格字符串是一类特殊的字符数组(最后一个元素是空字符’’),可以通过“数组名+下标索引”的方式对某个元素(即字符串中的某个字符)进行访问和读写。
代码示例:
运行结果:
【c风格字符串处理函数】
作为一种特殊类型的字符数组,C风格字符串可以使用cout和cin作整体的输入输出,但是,其他整体操作,如赋值、比较和连接等都是不允许的,如:
charx[10],y[10]=”ABCDEFGHI”;
x=”123456789”; //错误
x=y; //错误
if(x < y) //错误
{……}
x+=y; //错误
char* 指的是函数返回值是字符指针型,实际上,用指针处理c风格字符串是很多函数经常采用的方法,函数中的数组指的都是最后一个元素是空字符的字符数组,这就是c风格字符串。
常见的字符串处理函数:
取得字符串的长度:
Size_t*strlen(数组名) 不包括空字符
复制c风格字符串:
Char*strcpy(目标数组名,源数组名) 各数组的长度应相宜
将小写字母换成大写字母:
Int strupr (数组名)
C风格字符串相同比较:
Int strcmp(数组名1,数组名2)
将两个c风格字符串连接起来:
Char*strcat(数组名1,数组名2)
代码例子:
运行结果:
代码里面演示了如何使用库函数来处理c风格字符串,cstring头文件中有更多的处理函数的声明,在需要对字符进行操作的时候,请尽量使用库函数。
C++通过添加string类扩展了c++库,现在,不仅可以使用字符数组来处理字符串,还多了一种选择,使用string类型的对象。之所以之前一直强调“c风格字符串”,是为了和功能强大的string对象区分。
最后
以上就是老实台灯最近收集整理的关于【C++学习笔记】10_C风格字符串的全部内容,更多相关【C++学习笔记】10_C风格字符串内容请搜索靠谱客的其他文章。
发表评论 取消回复