您好,欢迎访问三七文档
字符串应用#includestring果断小米出品C语言的字符串•C语言中,字符串是按照一维数组来存储的。C语言定义的字符串方法就是chars1[30];//相当于开一个长度为30的字符串,下标为0~29•在C++中也可以用c语言的字符串的相关功能,不过需要#includecstring.(大部分由c开头的库都是为了和c语言兼容,都是c语言的库。)•C语言的字符串一般不用,所以这不是今天的重点。但是,你在读别人的程序时,有可能会用到。C++的字符串•C++有一个新的数据类型——字符串类型。•需要#includestring•这里的string是c++所独有的,c语言所没有的。•String作为C++的一个类。有了C++的面向对象的特性。•类的定义可以在谭浩强的《C++程序设计》中找到。•每一个类都有自己的数据类型,也有对于这些数据类型所独有的各种操作。•不必担心内存是否足够、字符串长度的极限等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用=进行赋值操作,==进行比较,+做串联(是不是很简单?)。我们完全可以将它看成是C++的基本数据类型。以下内容大多数来源于的常用操作•string变量的定义(声明)•读入及输出•string的运算符操作•string中的一些常用的内置函数string的各种定义方式#includeiostream#includestringusingnamespacestd;intmain(){strings0(Initialstring);//定义一个值为Initialstring的字符串s0,包括空格couts0:s0endl;strings1;//定义一个空字符串s1couts1:s1endl;strings2(s0);//定义一个s0字符串的copy字符串s2couts2:s2endl;strings3(s0,8,3);//定义一个字符串s3,该字符串的值为s0的第8位至第(8+3-1)位。//为什么是到第(8+3-1)位而不是第8+3位?因为string中涉及到的区间一向是左闭右开的,即[8,8+3).//注意:我们所数的s0的第1位实际为字符串中s0的第0位,所以s0的第8位是's',即正常数的第9位。couts3:s3endl;strings4(Acharactersequence,6);//定义一个字符串s4,值为Acharactersequence字符串中的0~6-1位(时刻要记得左闭右开)couts4:s4endl;strings5(Anothercharactersequence);//定义一个值为Anothercharactersequence的字符串s0couts5:s5endl;strings6(10,'x');//定义一个字符串s6,值为10个'x'couts6:s6endl;strings7(10,42);//42对应ascII表中的'*',所以定义一个字符串s7,值为10个'*'couts7:s7endl;strings8(s0.begin(),s0.begin()+7);//begin()是string类中的一个成员函数,代表s0的第0位,s0.begin()+7则代表s0的第6位//该定义等同于strings8(s0,0,7);couts8:s8endl;return0;}输出结果:小贴士:C++中我们也可以定义一个字符串数组,如strings[6];就相当于定义了六个字符串读入方法使用cin进行读入。cin的读入遇空格、Tab及回车结束#includeiostream#includestringusingnamespacestd;main(){stringstr;cinstr;coutstrendl;return0;}#includeiostream#includestringusingnamespacestd;main(){stringstr;getline(cin,str);coutstrendl;return0;}分别运行以下两个程序,输入“HelloC++!”,看看输出结果。使用getline进行读入。getline的读入为整行读入,即以回车结束getline的格式为getline(cin,变量名);输出方法请认准:cout因为printf()以及scanf()是C语言中的函数,所以无法对string类进行输出和读入。=和+操作#includeiostream#includestringusingnamespacestd;intmain(){stringstr1,str2,str3;str1=Teststring:;//字符串用双引号str2='x';//单个字符用单引号str3=str1+str2;coutstr3endl;return0;}输出结果:‘+‘是string中的链接符号。将上面的程序中的str1+str2换为str2+str1试试看!‘=‘的功能一目了然,不解释…+=(自加)操作#includeiostream#includestringusingnamespacestd;intmain(){stringname(John);stringfamily(Smith);name+=K.;//name自加K.,等同于name=name+K.;name+=family;//name自加一个familyname+='\n';//'\n'等同于换行符,如:cout'\n';等同于coutendl;coutname;//name中包括换行符return0;}输出结果:sring的下标操作[]String可以像数组一样进行应用单个元素。#includeiostream#includestringusingnamespacestd;intmain(){stringstr(Teststring);str[3]='T';//将字符串str的第3位(重新)赋值为’T’for(inti=0;istr.length();i++)//length()为string中的内置函数//功能为返回字符串长度//str.length()等于字符串str的长度coutstr[i];//依次输出str中的各个元素return0;}String的下标[]操作与数组类似,只不过这是一个字符数组String中的length()函数与size()函数功能等同,都为返回该字符串的当前长度。输出结果:==,!=,,=,,=,操作#includestring#includeiostreamusingnamespacestd;intmain(){stringstrinfo=Pleaseinputyourname:;coutstrinfo;cinstrinfo;if(strinfo==winter)coutyouarewinter!endl;elseif(strinfo!=wende)coutyouarenotwende!endl;elseif(strinfowinter)coutyournameshouldbeaheadofwinterendl;elsecoutyournameshouldbeafterofwinterendl;strinfo+=,WelcometoChina!;coutstrinfoendl;coutYournameis:endl;stringstrtmp=Howareyou?+strinfo;for(inti=0;istrtmp.size();i++)coutstrtmp[i];return0;}自己将程序复制到MinGW中边玩边学吧!!==:判断两个字符串是否一模一样,一样返回true,否则false!=:判断两个字符是否一模一样一样返回false,否则true:对两个字符串中的各个元素依次进行字典序(ascII码大小)比较,先小者为小,如abba,aazaba,当两字符串长度不等时,先遵循上述比较规则进行比较,如果比较到较小长度字符串最后一位字符时还未出结果,那么判定较小长度字符串为小,如abaac,ababc,=及=分别为的相对版、与=的组合版以及和=的组合版,不再解释!基础内容到此结束这是一条华丽的分割线……下面我们将介绍一些常用的内置函数(功能)与string的长度有关的函数•size()一个函数,返回该字符串当前的长度•length()一个函数,同size()•clear()一个过程,清除字符串中的所有元素,str.clear()等同于str=“”;•empty()一个函数,判断当前字符串是否为空(长度是否为0),空(长度为0)返回true,否则返回falsecoutstr.size()endl;//结果为10stringstr(“HelloC++!”)str.clear();coutstr+'\n';//结果为空coutstr.empty()'\n';//结果为1将以上程序连接起来运行试试!string的一些其它常用函数•insert()在任意位置插入任意一段字符•erase()清除任意位置或任意一段区间的字符•find()查找是否存在某一段字符串,并返回该段字符串所在位置•substr()取出任意一段字符串•replace()替换任意一段区间内的所有元素•swap()交换任意两个字符串insert()#includeiostream#includestringusingnamespacestd;intmain(){stringstr=tobequestion;stringstr2=the;stringstr3=ornottobe;string::iteratorit;//it是一个迭代器。//迭代器相当于指针,指代一个位置,像begin()函数就是指代字符串的第0位//括号中的字符串为插入后的位置,每种格式自己慢慢琢磨,不多讲了。str.insert(6,str2);//tobe(the)questionstr.insert(6,str3,3,4);//tobe(not)thequestionstr.insert(10,thatiscool,8);//tobenot(thatis)thequestionstr.insert(10,tobe);//tobenot(tobe)thatisthequestionstr.insert(15,1,':');//tobenottobe(:)thatisthequestionit=str.insert(str.begin()+5,‘,’);//tobe(,)nottobe:thatisthequestion//it为6,此时的insert()进行插入后并返回了插入的字符的所在位置,即迭代器str.insert(str.end(),3,'.');//tobe,nottobe:thatisthequestion(...)//end()代表字符串最后一位的下一位,str.end()代表第41位coutstrendl;//运行结果:tobe,nottobe:thatisthequestion...//其实还有一句str.insert(it+2,str3.begin(),str3.begin()+3);//因为编译器问题编译不过,所以以后别用这个格式//如果加上这句的话,结果就应该是tobe,ornottobe:thatisthequestion...//自己试着理解。return0;}输出结果:erase()输出结果:#
本文标题:C++的字符串
链接地址:https://www.777doc.com/doc-3972291 .html