C++程序设计—字符串字符串C++提供两种字符串形式,一种就是以'\0'作结束标志的字符数组,称为C字符串;另一种是string类,是使用更方便的标准字符串。1.空字符'\0'注意与空格字符''的区别,'\0'是C字符串在字符数组中保存的一个特殊的符号,没有这个符号的字符数组,就不是C字符串,而只能是一个字符数组。2.C字符串的定义与初始化定义一个能保存4个字符的C字符串cs如下:charcs[5];要给cs赋值为“abcd,可使用以下方法:strcpy(cs,abcd);或是在定义的同时赋值:charcs[5]=abcd;acs‘a’‘b’‘c’‘d’‘\0’cs[0]cs[1]cs[2]cs[3]cs[4]用字符数组存储和处理字符串字符串常量(例:program)各字符连续、顺序存放,每个字符占一个字节,以‘\0’结尾,相当于一个隐含创建的字符常量数组“program”出现在表达式中,表示这一char数组的首地址首地址可以赋给char常量指针:constchar*STRING1=program;字符串变量可以显式创建字符数组来表示字符串变量,例如,以下三条语句具有等价的作用:charstr[8]={'p','r','o','g','r','a','m','\0'};charstr[8]=program;charstr[]=program;4字符串案例一编写一个函数,自变量为字符串,函数值为该字符串中字母的个数;在主程序中实现输入输出。【分析】字符数组的输入输出可以有两种方法:(1)逐个字符输入输出(2)将整个字符串一次输入或输出。例如有以下程序段:charstr[20];cinstr;//用字符数组名输入字符串coutstr;//用字符数组名输出字符串输出时,逐个输出字符直到遇结束符′\0′,就停止输出。#includeiostreamusingnamespacestd;intcount(chara[100])//字符数组做函数参数{inti=0,c=0;while(a[i]!='\0'){if(a[i]='A'&&a[i]='Z'||a[i]='a'&&a[i]='z')c++;i++;}returnc;}intmain(){chartext[100];//定义字符数组cout请输入一个字符串:\n;cintext;cout你输入的字符串是:\n;couttextendl;cout字母个数=count(text)endl;system(PAUSE);return0;}用cin的操作符输入字符串,会以空格作为分隔符,空格后的内容会在下一回输入时被读取gets()函数用来从标准输入设备(键盘)读取字符串直到换行符结束,但换行符会被丢弃,然后在末尾添加‘\0’字符。其调用格式为:gets(s);其中s为字符串变量(字符串数组名或字符串指针)#includeiostreamusingnamespacestd;intcount(char*s){intc=0,i=0;while(*s!='\0'){if(*s='A'&&*s='Z'||*s='a'&&*s='z')c++;s++;}returnc;}intmain(){chartext[100];cout请输入一个字符串:\n;gets(text);cout字母个数=count(text)endl;system(PAUSE);return0;}用字符数组表示字符串的缺点用字符数组表示字符串的缺点执行连接、拷贝、比较等操作,都需要显式调用库函数,很麻烦当字符串长度很不确定时,需要用new动态创建字符数组,最后要用delete释放,很繁琐字符串实际长度大于为它分配的空间时,会产生数组下标越界的错误解决方法使用字符串类string表示字符串string实际上是对字符数组操作的封装9字符串【知识点】用字符数组来存放字符串并不是最理想和最安全的方法,C++提供了一种新的数据类型——字符串类型(string类型)。定义字符串变量:stringstring1;//定义string1为字符串变量stringstring2=″China″;//定义string2同时对其初始化要使用string类的功能时,必须添加#includestring字符串变量的输入输出cinstring1;//从键盘输入一个字符串给字符串变量coutstring2;//将字符串string2输出#includestringintcount(stringa)//字符串做参数{intc=0;inti=0;while(ia.length()){if(a[i]='A'&&a[i]='Z'||a[i]='a'&&a[i]='z')c++;i++;}returnc;}intmain(){stringtext;//定义字符串cout请输入一个字符串:\n;cintext;//字符串输入cout你输入的字符串是:\n;couttextendl;cout字母个数=count(text)endl;system(PAUSE);return0;}string类的成员函数及运算符假定定义:stringstr,str1,str2;intpos,len;则有以下函数可以使用:(1)取子字符串:str.substr(pos,len)(2)求串长:str.length()(3)判串空:str.empty()(4)插入子串:str.insert(pos,str2)(5)删除字串:str.remove(pos,len)(6)查找字串:str.find(str1)(7)定位查找字串:str.find(str1,pos)(8)定位查找串中字符:str.find_first_of(str1,pos)(9)查找不属于:str.find_first_not_of(str1,pos)(10)赋值、连接、比较等运算符号化:=、+、==、、、=、=、!=string的用法(2)常用操作符s+t将串s和t连接成一个新串s=t用t更新ss==t判断s与t是否相等s!=t判断s与t是否不等st判断s是否小于t(按字典顺序比较)s=t判断s是否小于或等于t(按字典顺序比较)st判断s是否大于t(按字典顺序比较)s=t判断s是否大于或等于t(按字典顺序比较)s[i]访问串中下标为i的字符例:strings1=“abc”,s2=“def”;strings3=s1+s2;//结果是”abcdef”bools4=(s1s2);//结果是truechars5=s2[1];//结果是’e’13字符串用getline输入整行字符串输入整行字符串用string头文件中的getline可以输入整行字符串,例如:getline(cin,s2);以其它字符作为分隔符输入字符串输入字符串时,可以使用其它分隔符作为字符串结束的标志(例如逗号、分号)把分隔符作为getline的第3个参数即可,例如:getline(cin,s2,',');14字符串#includestringintcount(stringa)//字符串做参数{intc=0;inti=0;while(ia.length()){if(a[i]='A'&&a[i]='Z'||a[i]='a'&&a[i]='z')c++;i++;}returnc;}intmain(){stringtext;cout请输入一个字符串:\n;getline(cin,text);//允许字符串中含空格cout你输入的字符串是:\n;couttextendl;cout字母个数=count(text)endl;system(PAUSE);return0;}用getline输入字符串16includeiostream#includestringusingnamespacestd;intmain(){for(inti=0;i2;i++){stringcity,state;getline(cin,city,',');getline(cin,state);coutCity:city“State:stateendl;}return0;}字符串Beijing,ChinaCity:BeijingState:ChinaSanFrancisco,theUnitedStatesCity:SanFranciscoState:theUnitedStates字符串数组不仅可以用string定义字符串变量,还可以定义字符串数组#includeiostream#includestringusingnamespacestd;intmain(){//stringname[5]={zhang,wang,li,zhao,liu};stringnames[5];for(inti=0;i5;i++){getline(cin,names[i]);}for(inti=0;i5;i++){coutnames[i]'\t';}system(PAUSE);return0;}