您的位置:首页 > 编程语言 > C语言/C++

【C++学习笔记】10_C风格字符串

2014-06-24 18:01 387 查看
C风格字符串
【c风格的字符串声明】

声明一个C风格字符串,使其内容为“ILove C++!”,代码如下:

charstr[]={‘I’,’’,’L’,’o’,’v’,’e’,’’,’C’,’+’,’+’,’!’,’\0’};

上述代码在声明数组时没有指定大小,这样,编译器就会自行计算决定数组的大小。对于C风格字符串的声明,推荐采用这种方式,免去了程序员自行计数的麻烦,如果由程序员指定的数组太小,编译器会报错,太大的话就浪费空间。但若在声明语句中无初始化表达式,则应该指出该字符数组的大小。

可以看出,存储一个字符串所需字节数比该串的字符数多1,如存储“Hello”,该串有5个字母,但C风格字符串需要6个字节。而且,上述声明方式看上去很麻烦,要一个字母一个字母地用单引号包裹起来,还要记着后面的’\0’,实际上,C++还提供了另一种声明C风格字符串的方法――使用字符串常量,如:

charstr[]=”ILove C++!”;



【字符数组的cin和cout】

仅仅由字符组成,但结尾不是’\0’的数组不是C风格字符串,如:

charstr[]={‘H’,’e’,’l’,’l’,’o’};

如此声明的str只能称为字符数组,空字符’\0’对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,因为还要留出一个字节存放空字符‘\0’,在例子中,重新输入“hello world!”(没有超过25个字符),但是为什么只有输出“hello”呢?

因为cin这个函数在进行输入操作的时候,会跳过前导空白,从第一个有效的字符开始读取,直到cin遇到一个空白字符才结束操作。



【get()函数和getline()函数】

那么如何将含空格的字符串读到C风格字符串中呢?这要用到istream类中提供的getline()和get()函数,两个函数都用于读入一行输入,直到遇到换行符,但getline()函数丢弃换行符,而get()函数也将换行符存入C风格字符串中,这里先介绍两个函数的用法。



代码示例:



运行结果:



在例子中,get()方法和getline()方法基本上差不多,有一个不同之处就是对回车换行符的处理。

get()方法是不提取换行符的。

getline()方法是提取出换行符,同时再抛弃掉换行符。



【访问c风格字符串中的某个元素】

C风格字符串是一类特殊的字符数组(最后一个元素是空字符’\0’),可以通过“数组名+下标索引”的方式对某个元素(即字符串中的某个字符)进行访问和读写。

代码示例:



运行结果:





【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对象区分。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: