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

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++!”;

 

字符数组的cincout

         仅仅由字符组成,但结尾不是’\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对象区分。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值