STL 字符串处理
2014-06-27 19:56
357 查看
1.字符串基本操作创建
对象s1~s4均是通过构造函数的方式创建新字符串对象。
(1)s1 string对象被创建,但是不包含初始值。 c语言中的char型数组在初始化前都包含随机的无意义的位模式,而与此不同,s1确实包含了有意义的信息,这个string对象被初始化成包含“没有字符”,同过类的成员函数能够正确地报告其长度为0,并没有数据元素。
(2)创建s4对象,构造函数中有三个参数,第一个参数类型是string类型,第二三个参数是整型,分别表示偏移量和计数量。
(3)对象s5,s6通过赋值的方式产生新的对象,s5是单一赋值,可以直接把char型数组赋给s5。s6表明可以把不同的初始化数据源结合在一起,本例即是把一个string对象与一个char型数组结合,构成新对象s6,但是要注意:写成string s6=s2+"Fine",可以编译通过,而写成string s6="Fine"+s2;不能通过,string对象赋值,等号右边第一项必须是string类型,而不能是char
型数组。
2.字符串迭代器创建方式
3.字符串插入操作
运行结果:
2
14
How do you do?
知识点:
(1)insert()函数,第一个参数表明插入源串的位置,第二个参数表明要插入的字符串,因此利用该函数可实现串首、串尾及任意位置处的字符串插入功能。
(2)append()函数,有一个输入参数,在源字符串尾部追加该字符串。
(3)利用“+”实现字符串的连接,从而创建新的字符串。
(4)size()函数,无输入参数,通过例子可知:它表明字符串长度值,即有多少个字符,初始的时候值是2,当完成增加后,值就变成14了。这说明字符串string类本身可根据需要自动调节串所在的内存空间大小,编程者无需参与,这一点是C语言中char型数组无法比拟的。
4.字符串替换操作
5.字符串查询
主要掌握的知识点如下所示
string::npos :这是string类中的一个成员变量,一般应用在判断系统查询函数的返回值上,若等于该值,表明没有符合查询条件的结果
值。
find()函数:在一个字符串中查找一个指定的单个字符或字符组。如果找到,就返回首次匹配的开始位置;如果没有找到匹配的内容,则
返回string::npos.一般有两个输入参数:一个是待查询的字符串,一个是查询的起始位置,默认起始位置为0。
find_first_of()函数:在一个字符串中进行查找,返回值是第1个与指定字符串中任何字符匹配的字符位置。如果没有找到匹配的内容,则
返回string::npos.一般有两个输入参数:一个是待查询的字符串,一个是查询的起始位置,默认起始位置为0。
find_last_of()函数:在一个字符串中进行查找,返回最后一个与指定字符串中任何字符匹配的字符位置。如果没有找到匹配的内容,则返
回string::npos.一般有两个输入参数:一个是待查询的字符串,一个是查询的起始位置,默认起始位置为0。
find_first_not_of()函数:在一个字符串中进行查找,返回第1个与指定字符串中任何字符都不匹配元素的位置。如果没有找到匹配的内
容,则返回string::npos.一般有两个输入参数:一个是待查询字符串,一个是查询的起始位置,默认起始位置为0。
find_last_not_of()函数:在一个字符串中进行查找,返回下标值最大的与指定字符串中任何字符都不 配的元素的位置。如果没有找到匹配
的内容,则返回string::npos.一般有两个输入参数:一个是待询的字符串,一个是查询的起始位置,默认起始位置为0。
rfind()函数:对一个串从尾至头查找一个指定的单个字符或字符组。如果找到,就返回首次匹配的始位置。如果没有查找到匹配的内
容,则返回string::npos.一般有两个输入参数:一个是待查询的 符串,一个是查询的起始位置,默认起始位置为串尾部。
(1)find(“your”), 是从源串起始位置为零(默认值)处查找有”your”字符串位置,所以结果为7。
(2)find(“you”, 15), 是从源串起始位置为15处查找有”you”字符串位置,所以结果为41。
(3)find_first_of(“abcde”),是从源串起始位置为零(默认值)处依次查找每个字符,如果它在输入的字符串参数“abcde”中,则返回该字
符的位置。由于源串头两个字符”w”,”h”不在查找的串中,而第3个字符“a”在查找的目的串中,又由于字符串是以0位基点的,所以结
果值为2。
(4)find_first_of(“abcde”,3),是从源串起始位置为3处依次查找每个字符,如果它在输入的字符串参数“abcde”中,则返回该字符的位置。分析同find_first_of(“abcde”),结果为13,对应的源串字符为“a”。
6.字符串中删除字符
7.字符串比较
主要是依据ASCII值来进行比较大小的。若字符串s1“大于”s2时,表明两者相比较时遇到了第一对不同的字符,字符串s1中第1个不同的
字符比字符串s2中同样位置的字符在ASCII表中的位置更靠后。
C++ STL提供了多种字符串比较方法,它们各具特色。其中最简单的就是使用非成员的重载运算符函
数:operator==、operator!=、operator>、operator<、operator>=、operator<=.
8.字符串与整型数据之间的转换
<span style="font-size:18px;">#include<iostream> #include<string> using namespace std; int main() { string s1; string s2("How are you?"); string s3(s2); string s4(s2,0,3); string s5="Fine"; string s6=s2+"Fine"; char a[]=" I'm Fine"; string s7=s2+a; cout<<s2<<endl<<s3<<endl<<s4<<endl<<s5<<endl<<s6<<endl<<s7<<endl; cout<<s1.size()<<endl; cout<<s2.size()<<endl; return 0; }</span>
对象s1~s4均是通过构造函数的方式创建新字符串对象。
(1)s1 string对象被创建,但是不包含初始值。 c语言中的char型数组在初始化前都包含随机的无意义的位模式,而与此不同,s1确实包含了有意义的信息,这个string对象被初始化成包含“没有字符”,同过类的成员函数能够正确地报告其长度为0,并没有数据元素。
(2)创建s4对象,构造函数中有三个参数,第一个参数类型是string类型,第二三个参数是整型,分别表示偏移量和计数量。
(3)对象s5,s6通过赋值的方式产生新的对象,s5是单一赋值,可以直接把char型数组赋给s5。s6表明可以把不同的初始化数据源结合在一起,本例即是把一个string对象与一个char型数组结合,构成新对象s6,但是要注意:写成string s6=s2+"Fine",可以编译通过,而写成string s6="Fine"+s2;不能通过,string对象赋值,等号右边第一项必须是string类型,而不能是char
型数组。
2.字符串迭代器创建方式
<span style="font-size:18px;">#include<iostream> #include<string> using namespace std; int main() { string s1="How are you?"; string s2(s1.begin(),s1.end()); string s3(s1.begin()+4,s1.begin()+7); cout<<s1<<endl<<s2<<endl<<s3<<endl; return 0; }</span>
3.字符串插入操作
<span style="font-size:18px;">#include<iostream> #include<string> using namespace std; int main() { string s="do"; cout<<s.size()<<endl; s.insert(0,"How "); s.append(" you "); s=s+"do?"; cout<<s.size()<<endl; cout<<s<<endl; return 0; }</span>
运行结果:
2
14
How do you do?
知识点:
(1)insert()函数,第一个参数表明插入源串的位置,第二个参数表明要插入的字符串,因此利用该函数可实现串首、串尾及任意位置处的字符串插入功能。
(2)append()函数,有一个输入参数,在源字符串尾部追加该字符串。
(3)利用“+”实现字符串的连接,从而创建新的字符串。
(4)size()函数,无输入参数,通过例子可知:它表明字符串长度值,即有多少个字符,初始的时候值是2,当完成增加后,值就变成14了。这说明字符串string类本身可根据需要自动调节串所在的内存空间大小,编程者无需参与,这一点是C语言中char型数组无法比拟的。
4.字符串替换操作
<span style="font-size:18px;">#include<string> #include<iostream> using namespace std; int main() { string s="What's your name?"; cout<<s<<endl; s.replace(7,4,"her"); cout<<s<<endl; return 0; }</span>
5.字符串查询
主要掌握的知识点如下所示
string::npos :这是string类中的一个成员变量,一般应用在判断系统查询函数的返回值上,若等于该值,表明没有符合查询条件的结果
值。
find()函数:在一个字符串中查找一个指定的单个字符或字符组。如果找到,就返回首次匹配的开始位置;如果没有找到匹配的内容,则
返回string::npos.一般有两个输入参数:一个是待查询的字符串,一个是查询的起始位置,默认起始位置为0。
find_first_of()函数:在一个字符串中进行查找,返回值是第1个与指定字符串中任何字符匹配的字符位置。如果没有找到匹配的内容,则
返回string::npos.一般有两个输入参数:一个是待查询的字符串,一个是查询的起始位置,默认起始位置为0。
find_last_of()函数:在一个字符串中进行查找,返回最后一个与指定字符串中任何字符匹配的字符位置。如果没有找到匹配的内容,则返
回string::npos.一般有两个输入参数:一个是待查询的字符串,一个是查询的起始位置,默认起始位置为0。
find_first_not_of()函数:在一个字符串中进行查找,返回第1个与指定字符串中任何字符都不匹配元素的位置。如果没有找到匹配的内
容,则返回string::npos.一般有两个输入参数:一个是待查询字符串,一个是查询的起始位置,默认起始位置为0。
find_last_not_of()函数:在一个字符串中进行查找,返回下标值最大的与指定字符串中任何字符都不 配的元素的位置。如果没有找到匹配
的内容,则返回string::npos.一般有两个输入参数:一个是待询的字符串,一个是查询的起始位置,默认起始位置为0。
rfind()函数:对一个串从尾至头查找一个指定的单个字符或字符组。如果找到,就返回首次匹配的始位置。如果没有查找到匹配的内
容,则返回string::npos.一般有两个输入参数:一个是待查询的 符串,一个是查询的起始位置,默认起始位置为串尾部。
<span style="font-size:18px;">#include <string> #include <iostream> using namespace std; int main(int argc, char* argv[]) { string s = "what't your name? my name is TOM. How do you do? Fine, thanks. "; int n = s.find("your"); cout << "the first your pos:" << n << endl; n = s.find("you", 15); cout << "the first your pos begin from 15:" << n << endl; n = s.find_first_of("abcde"); cout << "find pos when character within abcde:" << n << endl; n = s.find_first_of("abcde", 3); cout << "find pos begin from 2 when character within abcde:" << n << endl ; return 0; }</span>
(1)find(“your”), 是从源串起始位置为零(默认值)处查找有”your”字符串位置,所以结果为7。
(2)find(“you”, 15), 是从源串起始位置为15处查找有”you”字符串位置,所以结果为41。
(3)find_first_of(“abcde”),是从源串起始位置为零(默认值)处依次查找每个字符,如果它在输入的字符串参数“abcde”中,则返回该字
符的位置。由于源串头两个字符”w”,”h”不在查找的串中,而第3个字符“a”在查找的目的串中,又由于字符串是以0位基点的,所以结
果值为2。
(4)find_first_of(“abcde”,3),是从源串起始位置为3处依次查找每个字符,如果它在输入的字符串参数“abcde”中,则返回该字符的位置。分析同find_first_of(“abcde”),结果为13,对应的源串字符为“a”。
6.字符串中删除字符
<span style="font-size:18px;">#include<iostream> #include<string> using namespace std; int main() { string s1="How are you?"; s1.erase(s1.begin(),s1.begin()+3); cout<<s1<<endl; s1.erase(s1.begin(),s1.end()); cout<<s1<<endl; return 0; }</span>
7.字符串比较
主要是依据ASCII值来进行比较大小的。若字符串s1“大于”s2时,表明两者相比较时遇到了第一对不同的字符,字符串s1中第1个不同的
字符比字符串s2中同样位置的字符在ASCII表中的位置更靠后。
C++ STL提供了多种字符串比较方法,它们各具特色。其中最简单的就是使用非成员的重载运算符函
数:operator==、operator!=、operator>、operator<、operator>=、operator<=.
<span style="font-size:18px;">#include<iostream> #include<string> using namespace std; int main() { string s1="this"; string s2="that"; if(s1>s2) { cout<<"s1>s2"<<endl; } if(s1==s2) { cout<<"s1=s2"<<endl; } if(s1<s2) { cout<<"s1<s2"<<endl; } return 0; }</span>
8.字符串与整型数据之间的转换
<span style="font-size:18px;">#include<iostream> #include<stdio.h> #include<string> #include<sstream> using namespace std; int main() { int n1=10; int n2; string s1; stringstream os1; os1<<n1; os1>>s1; cout<<s1<<endl; //c中的字符转换 char a[10]; sprintf(a,"%d",n1); //转换为字符串 sscanf(a,"%d",&n2); //转换我=为数字 cout<<s1<<endl<<a<<endl<<n2<<endl; return 0; }</span>
相关文章推荐
- 字符串处理(STL之string)
- uva 11988 Broken Keyboard(字符串处理+ STL)
- 数据结构作业栈与队列(STL实现)处理字符串之从中部摇摆输出
- STL练习之字符串的处理
- codeforces 190C STL 字符串处理+栈思想
- STL 字符串处理
- 洛谷 1449 字符串处理 STL
- [C++]字符串处理方法(STL与C风格)
- 使用STL中的vector容器类处理字符串
- UVA - 10815【字符串处理STL】
- Leetcode 13 Roman to Integer 字符串处理+STL
- UVA - 10115 Automatic Editing(体现c++STL处理字符串的能力)
- 【STL】C++使用STL处理替换字符串操作。
- 2018.2.2【 CodeForces - 501B 】解题报告(STL,map,字符串处理)
- STL -- 关于一些字符串处理用到的函数和数据结构
- clob相关的咚咚以及字符串处理
- 项目工作小结之字符串处理的几个方法
- 几个测试SQL,测试SQL处理字符串
- 改进 ASP 应用程序中的字符串处理性能[转帖]
- 模拟字符串处理函数 stuff 的存储过程,对 ntext 字段进行stuff