C++中的string常用函数用法总结.docx

上传人:牧羊曲112 文档编号:3153673 上传时间:2023-03-11 格式:DOCX 页数:15 大小:43.69KB
返回 下载 相关 举报
C++中的string常用函数用法总结.docx_第1页
第1页 / 共15页
C++中的string常用函数用法总结.docx_第2页
第2页 / 共15页
C++中的string常用函数用法总结.docx_第3页
第3页 / 共15页
C++中的string常用函数用法总结.docx_第4页
第4页 / 共15页
C++中的string常用函数用法总结.docx_第5页
第5页 / 共15页
亲,该文档总共15页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《C++中的string常用函数用法总结.docx》由会员分享,可在线阅读,更多相关《C++中的string常用函数用法总结.docx(15页珍藏版)》请在三一办公上搜索。

1、C+中的string常用函数用法总结C+中的string常用函数用法总结 首先,为了在我们的程序中使用string类型,我们必须包含头文件 。 如下: #include /注意这里不是string.h string.h是C字符串头文件 #include using namespace std; 1声明一个C+字符串 声明一个字符串变量很简单: string Str; 这样我们就声明了一个字符串变量,但既然是一个类,就有构造函数和析构函数。上面的声明没有传入参数,所以就直接使用了string的默认的构造函数,这个函数所作的就是把Str初始化为一个空字符串。String类的构造函数和析构函数如下:

2、 a) string s; /生成一个空字符串s b) string s(str) /拷贝构造函数 生成str的复制品 c) string s(str,stridx) /将字符串str内“始于位置stridx”的部分当作字符串的初值 d) string s(str,stridx,strlen) /将字符串str内“始于stridx且长度顶多strlen”的部分作为字符串的初值 e) string s(cstr) /将C字符串作为s的初值 f) string s(chars,chars_len) /将C字符串前chars_len个字符作为字符串s的初值。 g) string s(num,c) /

3、生成一个字符串,包含num个c字符 h) string s(beg,end) /以区间beg;end(不包含end)内的字符作为字符串s的初值 i) s.string /销毁所有字符,释放内存 都很简单,我就不解释了。 2字符串操作函数 这里是C+字符串的重点,我先把各种操作函数罗列出来,不喜欢把所有函数都看完的人可以在这里找自己喜欢的函数,再到后面看他的详细解释。 a) =,assign /赋以新值 b) swap /交换两个字符串的内容 c) +=,append,push_back /在尾部添加字符 d) insert /插入字符 e) erase /删除字符 f) clear /删除全部

4、字符 g) replace /替换字符 h) + /串联字符串 i) =,!=,=,compare /比较字符串 j) size,length /返回字符数量 k) max_size /返回字符的可能最大个数 l) empty /判断字符串是否为空 m) capacity /返回重新分配之前的字符容量 n) reserve /保留一定量内存以容纳一定数量的字符 o) , at /存取单一字符 p) ,getline /从stream读取某值 q) /将谋值写入stream r) copy /将某值赋值为一个C_string s) c_str /将内容以C_string返回 t) data /将

5、内容以字符数组形式返回 u) substr /返回某个子字符串 v)查找函数 w)begin end /提供类似STL的迭代器支持 x) rbegin rend /逆向迭代器 y) get_allocator /返回配置器 下面详细介绍: 21 C+字符串和C字符串的转换 C +提供的由C+字符串得到对应的C_string的方法是使用data、c_str和copy,其中,data以字符数组的形式返回字符串内容,但并不添加/0。c_str返回一个以/0结尾的字符数组,而copy则把字符串的内容复制或写入既有的c_string或 字符数组内。C+字符串并不以/0结尾。我的建议是在程序中能使用C+字

6、符串就使用,除非万不得已不选用c_string。由于只是简单介绍,详细介绍掠过,谁想进一步了解使用中的注意事项可以给我留言(到我的收件箱)。我详细解释。 22 大小和容量函数 一个C+字符串存在三种大小:a)现有的字符数,函数是size和length,他们等效。Empty用来检查字符串是否为空。b)max_size 这个大小是指当前C+字符串最多能包含的字符数,很可能和机器本身的限制或者字符串所在位置连续内存的大小有关系。我们一般情况下不用关心他,应该大小足够我们用的。但是不够用的话,会抛出length_error异常c)capacity重新分配内存之前 string所能包含的最大字符数。这里

7、另一个需要指出的是reserve函数,这个函数为string重新分配内存。重新分配的大小由其参数决定, 默认参数为0,这时候会对string进行非强制性缩减。 还有必要再重复一下C+字符串和C字符串转换的问 题,许多人会遇到这样的问题,自己做的程序要调用别人的函数、类什么的,但别人的函数参 数用的是char*形式的,而我们知道,c_str、data返回的字符数组由该字符串拥有,所以是一种const char*,要想作为上面提及的函数的参数,还必须拷贝到一个char*,而我们的原则是能不使用C字符串就不使用。那么,这时候我们的处理方式是:如果 此函数对参数(也就是char*)的内容不修改的话,我

8、们可以这样Connect(char*)UserID.c_str, (char*)PassWD.c_str),但是这时候是存在危险的,因为这样转换后的字符串其实是可以修改的,所以我强调除非函数调用的时候不对参数进行修改,否则必须拷贝到一个char*上去。当然,更稳妥的办法是无论什么情况都拷贝到一个char*上去。同时我们也祈祷现在仍然使用C字符串进行编程的高手们写的函数都比较规范,那样我们就不必进行强制转换了。 23元素存取 我们可以使用下标操作符和函数at对元素包含的字符进行访问。但是应该注意的是操作符并不检查索引是否有效,如果索引失效,会引起未定义的行为。而at会检查,如果使用 at的时候索

9、引无效,会抛出out_of_range异常。 有一个例外不得不说,const string a;的操作符对索引值是a.length仍然有效,其返回值是/0。其他的各种情况,a.length索引都是无效的。举例如下: const string Cstr(“const string”); string Str(“string”); Str3; /ok Str.at(3); /ok Str100; /未定义的行为 Str.at(100); /throw out_of_range StrStr.length /未定义行为 CstrCstr.length /返回 /0 Str.at(Str.length

10、);/throw out_of_range Cstr.at(Cstr.length) /throw out_of_range 我不赞成类似于下面的引用或指针赋值: char& r=s2; char* p= &s3; 因为一旦发生重新分配,r,p立即失效。避免的方法就是不使用。 24比较函数 C +字符串支持常见的比较操作符,甚至支持string与C-string的比较(如 str,=,=这些操作符的时候是根据“当前字符特性”将字符按字典顺序进行逐一得 比较。字典排序靠前的字符小,比较的顺序是从前向后比较,遇到不相等的字符就按这个位置上的两个字符的比较结果确定两个字符串的大小。同时,string

11、 (“aaaa”) string(aaaaa)。 另一个功能强大的比较函数是成员函数compare。他支持多参数处理,支持用索引值和长度定位子串来进行比较。他返回一个整数来表示比较结果,返回值意义如下:0-相等 0-大于 从输入流读取一个string。 2用于输入,同样重载运算符operator,=,时返回1,时返回-1,=时返回0 string的子串: string substr(int pos = 0,int n = npos) const;/返回pos开始的n个字符组成的字符串 string的交换: void swap(string &s2); /交换当前字符串与s2的值 string类

12、的查找函数: int find(char c, int pos = 0) const;/从pos开始查找字符c在当前字符串的位置 int find(const char *s, int pos = 0) const;/从pos开始查找字符串s在当前串中的位置 int find(const char *s, int pos, int n) const;/从pos开始查找字符串s中前n个字符在当前串中的位置 int find(const string &s, int pos = 0) const;/从pos开始查找字符串s在当前串中的位置 /查找成功时返回所在位置,失败返回string:npos的

13、值 int rfind(char c, int pos = npos) const;/从pos开始从后向前查找字符c在当前串中的位置 int rfind(const char *s, int pos = npos) const; int rfind(const char *s, int pos, int n = npos) const; int rfind(const string &s,int pos = npos) const; /从pos开始从后向前查找字符串s中前n个字符组成的字符串在当前串中的位置,成功返回所在位置,失败时返回string:npos的值 int find_first_

14、of(char c, int pos = 0) const;/从pos开始查找字符c第一次出现的位置 int find_first_of(const char *s, int pos = 0) const; int find_first_of(const char *s, int pos, int n) const; int find_first_of(const string &s,int pos = 0) const; /从pos开始查找当前串中第一个在s的前n个字符组成的数组里的字符的位置。查找失败返回string:npos int find_first_not_of(char c, i

15、nt pos = 0) const; int find_first_not_of(const char *s, int pos = 0) const; int find_first_not_of(const char *s, int pos,int n) const; int find_first_not_of(const string &s,int pos = 0) const; /从当前串中查找第一个不在串s中的字符出现的位置,失败返回string:npos int find_last_of(char c, int pos = npos) const; int find_last_of(c

16、onst char *s, int pos = npos) const; int find_last_of(const char *s, int pos, int n = npos) const; int find_last_of(const string &s,int pos = npos) const; int find_last_not_of(char c, int pos = npos) const; int find_last_not_of(const char *s, int pos = npos) const; int find_last_not_of(const char *s

17、, int pos, int n) const; int find_last_not_of(const string &s,int pos = npos) const; /find_last_of和find_last_not_of与find_first_of和find_first_not_of相似,只不过是从后向前查找 string类的替换函数: string &replace(int p0, int n0,const char *s);/删除从p0开始的n0个字符,然后在p0处插入串s string &replace(int p0, int n0,const char *s, int n);

18、/删除p0开始的n0个字符,然后在p0处插入字符串s的前n个字符 string &replace(int p0, int n0,const string &s);/删除从p0开始的n0个字符,然后在p0处插入串s string &replace(int p0, int n0,const string &s, int pos, int n);/删除p0开始的n0个字符,然后在p0处插入串s中从pos开始的n个字符 string &replace(int p0, int n0,int n, char c);/删除p0开始的n0个字符,然后在p0处插入n个字符c string &replace(it

19、erator first0, iterator last0,const char *s);/把first0,last0)之间的部分替换为字符串s string &replace(iterator first0, iterator last0,const char *s, int n);/把first0,last0)之间的部分替换为s的前n个字符 string &replace(iterator first0, iterator last0,const string &s);/把first0,last0)之间的部分替换为串s string &replace(iterator first0, it

20、erator last0,int n, char c);/把first0,last0)之间的部分替换为n个字符c string &replace(iterator first0, iterator last0,const_iterator first, const_iterator last);/把first0,last0)之间的部分替换成first,last)之间的字符串 string类的插入函数: string &insert(int p0, const char *s); string &insert(int p0, const char *s, int n); string &inse

21、rt(int p0,const string &s); string &insert(int p0,const string &s, int pos, int n); /前4个函数在p0位置插入字符串s中pos开始的前n个字符 string &insert(int p0, int n, char c);/此函数在p0处插入n个字符c iterator insert(iterator it, char c);/在it处插入字符c,返回插入后迭代器的位置 void insert(iterator it, const_iterator first, const_iterator last);/在it

22、处插入first,last)之间的字符 void insert(iterator it, int n, char c);/在it处插入n个字符c string类的删除函数 iterator erase(iterator first, iterator last);/删除first,last)之间的所有字符,返回删除后迭代器的位置 iterator erase(iterator it);/删除it指向的字符,返回删除后迭代器的位置 string &erase(int pos = 0, int n = npos);/删除pos开始的n个字符,返回修改后的字符串 string类的迭代器处理: str

23、ing类提供了向前和向后遍历的迭代器iterator,迭代器提供了访问各个字符的语法,类似于指针操作,迭代器不检查范围。 用string:iterator或string:const_iterator声明迭代器变量,const_iterator不允许改变迭代的内容。常用迭代器函数有: const_iterator beginconst; iterator begin; /返回string的起始位置 const_iterator endconst; iterator end; /返回string的最后一个字符后面的位置 const_iterator rbeginconst; iterator rb

24、egin; /返回string的最后一个字符的位置 const_iterator rendconst; iterator rend; /返回string第一个字符位置的前面 rbegin和rend用于从后向前的迭代访问,通过设置迭代器string:reverse_iterator,string:const_reverse_iterator实现 字符串流处理: 通过定义ostringstream和istringstream变量实现,头文件中 例如: string input(hello,this is a test); istringstream is(input); string s1,s2,s3,s4; iss1s2s3s4;/s1=hello,this,s2=is,s3=a,s4=test ostringstream os; oss1s2s3s4; coutos.str;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号