C++中字符串的介绍

上传人:桔**** 文档编号:457164155 上传时间:2023-06-05 格式:DOC 页数:12 大小:148.50KB
返回 下载 相关 举报
C++中字符串的介绍_第1页
第1页 / 共12页
C++中字符串的介绍_第2页
第2页 / 共12页
C++中字符串的介绍_第3页
第3页 / 共12页
C++中字符串的介绍_第4页
第4页 / 共12页
C++中字符串的介绍_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《C++中字符串的介绍》由会员分享,可在线阅读,更多相关《C++中字符串的介绍(12页珍藏版)》请在金锄头文库上搜索。

1、C+中字符串的介绍字符串是个特殊的字符数组。与普通字符数组不同的是,字符串在结尾处有一个字符“0”,表示字符串的结束。在C+中字符串有特殊的初始化方式和专门的处理函数。本节将介绍字符串的特性,在下一节中将介绍专门用于处理字符串的函数。11字符串的特性111什么是字符串在C+语言中,没有专门的字符串类型,一个字符串,其实就是一个字符数组。不过并不是数组中的所有字符都是字符串的一部分,字符串是以字符“0”表示字符串的结束的。所以在字符数组中,所有在字符0之前的字符才是字符串中的有效字符。字符串也有字面常量,其形式是用双引号包围起来一串字符。例如:HelloWorld;前面讲到的字符,用的是单引号,

2、字符串用的是双引号,这点不要弄反了。a是一个字符串,而不是一个字符,虽然这个字符串只有一个有效字符。上面定义了一个字符串,其存储形式如图1.1所示。图1.1字符串的存储形式每一个字符串,后面都有一个不可见的字符“0”,这个字符是字符串的结束标志。因此上面的字符串有12个字符。双引号表示其中的内容是一个字符串,字符串中并不包括双引号。前面讲字符类型的时候讲过转义字符,比如字符“n”表示换行。字符串中可以包含转义字符,例如:HellonWorld;如果输出上面的字符串,则会分两行输出。表示只有空格字符的字符串,而也是一个字符串,这个字符串只有一个结束标志。字符串还可以分多行定义,例如:HelloW

3、orld;上面的定义相当于HelloWorld,编译器会自动把分行定义的字符串连接起来。需要注意的是,只有在结束的时候才可以有语句结束的分号;,前面都不能有。字符串的结束标志不需要显式地提供,编译器会自动在后面追加。112定义字符串用双引号包围的字符串是字符串类型的字面常量,不可以修改。而作为变量的字符串,其实就是字符数组。定义一个字符串其实就是定义一个字符数组,例如:charname10;/定义一个名字是name的字符串也可以定义二维的或者多维的字符数组,例如:charnames1010;/定义一个二维字符数组,通常称这样的数组为字符串数组1.1.3字符串的初始化同普通数组一样,字符数组也允

4、许在定义的时候直接初始化,例如:charname10=J,a,s,o,n;同样,如果为数组的所有元素提供了初始值,则字符数组的长度可以省略,例如:charname=J,a,s,o,n;这时数组长度被自动定义为5。还可以用字符串来作为字符数组的初始值,因此还可以这么写:charname=Jason;上面的语句定义了一个长度为6的字符数组,其最后的一个字符为“0”。在这种初始化方式下,不需要花括号和。通常用上面的方法对字符数组进行初始化,而不用单个字符的方式。1.1.4操作字符串字符串作为一个字符数组,同样可以使用下标的方法来操作每一个字符,不过字符串有一些普通数组没有的特性。前面在介绍数组的时候

5、提到过,cin和cout不可以直接操作数组,但是字符数组是个特例。可以直接用C+的标准输入cin输入整个数组的元素,用标准输出cout输出整个字符数组。下面对一个输入的字符串进行反转,其算法是:第一个字符和最后一个字符交换,第二个字符和倒数第二个字符交换,依此类推。假定字符串为abcdefg,那么其交换过程示意如下:agbfced保持不变交换之后就成了gfedcba。交换到字符d时,也就是字符串一半的时候,这时的结果已经是gfedcba,交换已经完成了,如果继续再交换下去,则又会恢复成交换之前的样子。该实例的具体代码如示例代码6.4所示。示例代码6.4#includeusingnamespac

6、estd;/使用名称空间stdintmain(intargc,char*argv)/主函数charbuffer128;cinbuffer;intlen=(int)strlen(buffer);for(inti=0;ilen/2;i+)chartemp=bufferi;bufferi=bufferlen-i-1;bufferlen-i-1=temp;coutvv反转之后的字符串为:system(PAUSE);returnEXIT_SUCCESS;/字符数组/输入字符串/取得字符串的长度/遍历字符串/交换两个字符!vvbuffervvendl;/输出提示信息/等待用户反应/主函数返回建立一个控制台

7、工程,并将上述代码复制到源文件中,编译并运行,其结果如图6.10所/示OfshijklRii反转之后商字nnlkjiligfE(l-chrPFessdH即tcfitlnue,.图1.2字符串反转结果对于buffer0,其对应的要交换的为bufferlen-1,对于第i个字符bufferi,其需要交换的为bufferlen-i-1。最后来看循环结束的条件:如果字符串的长度len为偶数,最后一对需要交换的是bufferlen/2-1和bufferlen/2;如果字符串的长度len为奇数,bufferlen/2是中间字符,不需要交换,最后一对需要交换的字符是bufferlen/2-1和bufferl

8、en/2+1。因此用条件ivlen/2就可以保证交换完全并且没有多余的交换。115字符串的数组也可以定义二维的字符数组,也就是字符串的数组。例如下面定义可以存储多个人名的数组:charnames1040;同普通的二维数组一样,字符串数组在定义的时候也可以初始化:charnames1040=Tom,Mary,Jacky,Jason;上面定义了一个长度为10的字符串数组,并给前4个进行了初始化,剩余部分用空字符串来填充。不能遗忘两个字符串中间的,。1.2字符串处理函数虽然可以对字符数组用字符串进行初始化,可以直接输入、输出字符串,但是在使用字符数组的时候还是有很多不便,比如不能直接对字符数组进行赋

9、值、不能比较两个字符数组的大小等。因此C+提供了一些函数来处理字符串,下面介绍几个常用的函数。1.2.1字符串复制函数strcpy字符串是一个字符数组,因此它就有数组的局限性,不能用一个字符串给另外一个字符串赋值,例如:charname10;name=Jason;/错误,不可以这样直接赋值为了方便实现上面的功能,C+标准库中提供了strcpy函数,其定义格式为:strcpy(字符数组名1,字符数组名2)函数把字符数组2中的字符串复制到字符数组1中,串结束标志0也一同复制。使用例子如下:charstr1128,str2=HelloWorld;strcpy(str1,str2);/把str2复制到

10、str1程序员需要自己保证strl的长度足够容纳str2的内容,如果str2的长度超过了strl的长度,可能会导致系统崩溃。其中第二个参数可以直接是一个字符串,因此也可以这样使用:charstr128;strcpy(str,HelloWorld);/直接给str赋值在下面的例子中需要用户输入两个字符串,然后把这两个字符串的内容互换,程序如示例代码2.1所示。#includeusingnamespacestd;/使用名称空间stdintmain(intargc,char*argv)/主函数coutvv请依次输入两个字符串:vvendl;charstr1128,str2128;/字符串变量cins

11、tr1;/输入cinstr2;coutvv第一个字符串为:vvstrlvvendl;coutvv第二个字符串为:vvstr2vvendl;coutvvendlvv交换两个字符串vvendl;chartemp128;临时字符串变量strcpy(temp,strl);/交换两个字符串strcpy(strl,str2);strcpy(str2,temp);coutvv交换之后的字符串为:vvendlvvendl;coutvv第一个字符串为:vvstrlvvendl;coutvv第二个字符串为:vvstr2vvendl;system(PAUSE);/等待用户反应returnEXIT_SUCCESS;/

12、主函数返回建立一个控制台工程,并将上述代码复制到源文件中,编译并运行,其结果如图2.1所/示O请恢次输入两个字符串AbedefgIriijklFin睾二笃鶴势沈汁II1交藝两个宇符帯交強之启的字符昂为:堇一个丰时串为:畫二水学僻宙比aJcdefsPi-cs鼻n即ktytotcnt:hue图2.1交换字符串结果strcpy函数复制的是字符0之前的内容(包括这个结束标志),不是整个字符数组的内容。122计算字符串长度函数strlen对于字符数组,可以通过sizeof来得到其定义的长度,但是这个长度对于字符串是没有意义的。因为通常想要得到的是其有效内容的长度,也就是在字符0之前的字符的个数。在C+标

13、准库中提供了函数strlen,可以实现这个功能。strlen函数的格式如下:strlen(字符数组名)strlen将字符串的实际长度作为函数的返回值。使用例子如下:charstr128=HelloWorld;intlen=strlen(str);/取得字符串的长度上面的len值为11,包括里面的空格,但是不包括里面的字符串结束标志。下例中需要用户输入一个字符串,然后用strlen函数计算其长度,程序如示例代码2.2所示。#includeviostreamusingnamespacestd;intmain()coutvv请输入一个字符串:vvendl;charstr128;cinstr;cout

14、vv字符串的长度为:vvstrlen(str)vvendl;return0;建立一个控制台工程,并将上述代码复制到源文件中,编译并运行,其结果如图2.2所/示。请输入i个尹酱串bcdetghijlJcnladso-asd字符审的长度=21ssanyk絶中tonoiit图2.2使用strlen函数示例结果123字符串连接函数strcat对于两个整数a和b,下面的代码结果是把两个整数相加:inta=3;intb=5;intc=a+b;对于字符串,其加法的意义应该是把两个字符串连接起来,对于下面两个定义:charstr1128=HelloWorld;charstr2128=C+Programming;如果想把两个字符串连接起来,直接用+是不可以的,在C+标准库中提供了一个可以实现这个功能的函数,这个函数就是strcat。函数格式如下:strcat(字符数组名1,字符数组名2)函数把字符数组2中的字符串连接到字符数组1中字符串的后面,并删去字符串1后的串标志0。本函数返回值是字符数组1的首地址。使用例子如下:charstr1128=HelloWorld;charstr2128=C+Pro

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号