您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > C++课件第11章-string类字符串处理
第11章string类字符串处理第11章string类字符串处理学习目标1.使用C++标准类库中的string定义字符串对象;2.能使用string类成员函数、操作符对字符串对象进行各种操作;3.使用字符串对象位置指针;4.字符串对象与C风格字符串的转换。在前面的章节中,存储字符串使用的是字符数组,对于字符串的处理是借助Cstring头文件中提供的字符串函数完成的。学习了类与对象后,发现这种方式不符合面向对象的风格,于是我们自己定义了字符串类String,编写少数字符串处理的成员函数。字符串是C++中一种很重要的数据,C++标准类库提供了字符串类string,为字符串处理提供了大量的操作。11.1string类对象的定义使用数组存储字符串,调用系统函数来处理字符串这种数据与处理分离的方式不符合C++面向对象的风格。为此,C++提供了模板类basic_string,通过:typedefbasic_stringcharstring;将模板类basic_strin具体化成字符串类string,string类封装了字符串的属性与方法,使对字符串处理变得方便。使用string类需要包括头文件string:#includestring11.1string类对象的定义字符串类构造函数的原型与功能列表如表11-1。11.1string类对象的定义表11-1String类构造函数原型构造函数的原形作用string()默认构造函数,建立长度为0的字符串string(conststring&rhs)拷贝构造函数,利用已存在的串rhs初始化新串string(conststring&rhs,unsignedpos,unsignedn)将存在的串rhs的从位置pos开始,取n个字符初始化新串(位置编号从0开始)string(constchar*)用字符数组s初始化新串string(constchar*s,unsignedn)用字符数组s前n个字符初始化新串string(unsignedn,charc)将字符c重复n次作为新串的值2.链表类模板123456789101112131415161718192021232425/*****************************************p11_1.cpp**string类对象的建立与初始化*****************************************/#includestring#includeiostreamusingnamespacestd;intmain(){char*S1=12345;stringS2;//建立长度为0的字符串stringS3(abcde);//用字符串初始化新串stringS4(S3);//利用已存在的串S3初始化新串stringS5(S3,0,3);//利用已存在的串S3初始化新串stringS6(S1,3);//利用已存在的字符数组初始化新串stringS7(6,'A');coutS2=S2endl;coutS3=S3endl;coutS4=S4endl;coutS5=S5endl;coutS6=S6endl;coutS7=S7endl;return0;}运行结果:S2=S3=abcdeS4=abcdeS5=abcS6=123S7=AAAAAAstring类提供了丰富的成员函数,每个成员函数又有多种重载形式,表11-2只列出常用的成员函数与常用的原型。11.2string类成员函数表11-2string类常用成员函数成员函数的原型功能unsignedlength()const返回本字符串对象的长度unsignedsize()const返回本字符串对象的大小string&append(constchar*s);string&append(constchar*s,unsignedn);string&append(conststring&str,unsignedpos,unsignedn);将字符串s附加到本串尾将字符串s的n个字符附加到本串尾将字符串对象str从pos开始的的n个字符附加到本串尾string&assign(conststring&str,unsignedpos,unsignedn);将字符串对象str从pos开始的的n个字符赋给本串intcompare(conststring&str)const本串与str比较,本串str返回负数;本串==str返回0;本串str返回正数string&insert(unsignedp0,conststring&str,unsignedpos,unsignedn);将字符串对象str从pos开始的的n个字符插入到本串p0处stringsubstr(unsignedpos=0,unsignedn=npos)const返回从pos开始n个字符构成的字符串对象unsignedfind(conststring&str,unsignedpos=0)const在本串中查找str,返回第一次出现的位置;未找到,返回string::nposstring&replace(unsignedp0,unsignedn0,conststring&str);用str替换本串中从位置p0开始的n0个字符voidswap(string&str)交换本串与str2.链表类模板123456789101112131415161718192021232425/***************************************************************p11_2.cpp**string类的成员函数的使用,字符串查找与替换***************************************************************/#includestring#includeiostreamusingnamespacestd;intmain(){stringtext(Ilikec++,Iusec++programming.);//文本stringnewstr;//新串stringsstr;//待查串intpos;//存放查找到串的位置coutInputstringandnewstring:;cinsstrnewstr;if((pos=text.find(sstr))==string::npos)//未查找到coutsstrnotfoundin\text\endl;else{coutoldstring:textendl;text.replace(pos,sstr.length(),newstr);coutnewstring:textendl;}return0;}运行结果:Inputstringandnewstring:c++Java↙oldstring:Ilikec++,Iusec++programmingnewstring:IlikeJava,Iusec++programmingstring类重载了多个操作符用于对字符串进行操作,列表如表11-3。11.3string类的操作符表11-3string类操作符操作符示例功能+S+T将S与T连成一个新串=T=S以S更新T+=T+=ST=T+S==,!=,,=,,=T==S,T!=S,TS,T=S,TS,T=S将T串与S串进行比较[]S[i]存取串中第i个元素coutS将串S插入出流对象cinS从输入流对象提取串给S2.链表类模板1234567891011121314151617181920212324/********************************************p11_3.cpp**string类的操作符将字符串排序********************************************/#includestring#includeiostreamusingnamespacestd;intmain(){constintn=6;stringline[]={A,above,a,an,about,1234};for(inti=0;in-1;i++)for(intj=i+1;jn;j++)if(line[i]line[j])//如果前面字串比后面大{//line[i].swap(line[j]);交换stringtemps;temps=line[i];line[i]=line[j];line[j]=temps;}for(i=0;in;i++)coutline[i]endl;return0;}运行结果:1234Aaaboutabovean2.链表类模板1234567891011121314151617181920212324/**************************************************程序名:p11_4.cpp**功能:string类的字符串运算符的应用**************************************************/#includeiostream#includestringusingnamespacestd;intmain(){stringstr1(C++);stringstr2(is);stringstr3,str4;stringstr5(powerful);cinstr3;//字符串输入coutstr1str2str3!endl;//string对象输出str4=str1++str2++str3+!;//字符串连接coutstr4endl;if(str3str5)//字符串比较coutstr3str5str5:str5endl;stringstr6(str5);//字符串赋值str6=str1++str2++str6+!;coutstr6endl;return0;}运行结果:okC++isok!C++isok!str3str5str5:powerfulC++ispowerful!string类提供了指向string类串中字符的位置指针(迭代器iterator),用于访问单个字符,向前和向后遍历字符串。指针可以进行加、减运算,不检查指向的位置是否越界。string类串位置指针的类型有:string::iteratorstring::const_iterator//常指针类型,用于指向常对象string::reverse_iterators//反向指针类型string::const_reverse_iterators//常反向指针类型,用于指向常对象11.4string类串位置指针string类用于读取指针的成员函数列表如表11-4。11.4string类串位置指针表11-4string类操作符成员函数的原型功能const_iteratorbegin()const;iteratorbegin();返回常串对象第1个字符的位置返回第1个字符的位置const_iteratorend()const;iteratorend();返回常串对象最后一个字符的位置返回最后一个字符的位置const_reverse_iteratorrbegin()const;reverse_iteratorrbegin();逆向返回常串对象第1个字符的位置逆向返回第1个字符的位置const_reverse_iteratorrend()const;reverse_iteratorrend();逆向返回常串对象最后一个字符的位置逆向返回最后一个字符的位置2.链表类模板12345678910111213141516171819202122/***************
本文标题:C++课件第11章-string类字符串处理
链接地址:https://www.777doc.com/doc-7853078 .html