设为首页 加入收藏

TOP

在c++在string常用函数用法详情(二)
2018-01-13 06:06:51 】 浏览:687
Tags:string 常用 函数 用法 详情
ange

Str[Str.length()] //未定义行为

Cstr[Cstr.length()] //返回 ‘/0'

Str.at(Str.length());//throw out_of_range

Cstr.at(Cstr.length()) ////throw out_of_range

我不赞成类似于下面的引用或指针赋值:

char& r=s[2];

char* p= &s[3];

因为一旦发生重新分配,r,p立即失效。避免的方法就是不使用。

2.4比较函数

C ++字符串支持常见的比较操作符(>,>=,<,<=,==,!=),甚至支持string与C-string的比较(如 str<”hello”)。在使用>,>=,<,<=这些操作符的时候是根据“当前字符特性”将字符按字典顺序进行逐一得 比较。字典排序靠前的字符小,比较的顺序是从前向后比较,遇到不相等的字符就按这个位置上的两个字符的比较结果确定两个字符串的大小。同时,string (“aaaa”)

另一个功能强大的比较函数是成员函数compare()。他支持多参数处理,支持用索引值和长度定位子串来进行比较。他返回一个整数来表示比较结果,返回值意义如下:0-相等 〉0-大于 <0-小于。举例如下:

string s(“abcd”);

s.compare(“abcd”); //返回0

s.compare(“dcba”); //返回一个小于0的值

s.compare(“ab”); //返回大于0的值

s.compare(s); //相等

s.compare(0,2,s,2,2); //用”ab”和”cd”进行比较 小于零

s.compare(1,2,”bcx”,2); //用”bc”和”bc”比较。

怎么样?功能够全的吧!什么?还不能满足你的胃口?好吧,那等着,后面有更个性化的比较算法。先给个提示,使用的是STL的比较算法。什么?对STL一窍不通?靠,你重修吧!

2.5 更改内容

这在字符串的操作中占了很大一部分。

首先讲赋值,第一个赋值方法当然是使用操作符=,新值可以是string(如:s=ns) 、c_string(如:s=”gaint”)甚至单一字符(如:s='j')。还可以使用成员函数assign(),这个成员函数可以使你更灵活的对字符串赋值。还是举例说明吧:

s.assign(str); //不说

s.assign(str,1,3);//如果str是”iamangel” 就是把”ama”赋给字符串

s.assign(str,2,string::npos);//把字符串str从索引值2开始到结尾赋给s

s.assign(“gaint”); //不说

s.assign(“nico”,5);//把'n' ‘I' ‘c' ‘o' ‘/0'赋给字符串

s.assign(5,'x');//把五个x赋给字符串

把字符串清空的方法有三个:s=””;s.clear();s.erase();(我越来越觉得举例比说话让别人容易懂!)。

string提供了很多函数用于插入(insert)、删除(erase)、替换(replace)、增加字符。

先说增加字符(这里说的增加是在尾巴上),函数有 +=、append()、push_back()。

举例如下:

s+=str;//加个字符串

s+=”my name is jiayp”;//加个C字符串

s+='a';//加个字符

s.append(str);

s.append(str,1,3);//不解释了 同前面的函数参数assign的解释

s.append(str,2,string::npos)//不解释了

s.append(“my name is jiayp”);

s.append(“nico”,5);

s.append(5,'x');

s.push_back(‘a');//这个函数只能增加单个字符对STL熟悉的理解起来很简单

也许你需要在string中间的某个位置插入字符串,这时候你可以用insert()函数,这个函数需要你指定一个安插位置的索引,被插入的字符串将放在这个索引的后面。

s.insert(0,”my name”);

s.insert(1,str);

这种形式的insert()函数不支持传入单个字符,这时的单个字符必须写成字符串形式(让人恶心)。既然你觉得恶心,那就不得不继续读下面一段话:为了插 入单个字符,insert()函数提供了两个对插入单个字符操作的重载函数:insert(size_type index,size_type num,chart c)和insert(iterator pos,size_type num,chart c)。其中size_type是无符号整数,iterator是char*,所以,你这么调用insert函数是不行的:insert(0,1, 'j');这时候第一个参数将转换成哪一个呢?所以你必须这么写:insert((string::size_type)0,1,'j')!第二种形式指 出了使用迭代器安插字符的形式,在后面会提及。顺便提一下,string有很多操作是使用STL的迭代器的,他也尽量做得和STL靠近。

删除函数erase()的形式也有好几种(真烦!),替换函数replace()也有好几个。

举例吧:

string s=”il8n”;

s.replace(1,2,”nternationalizatio”);//从索引1开始的2个替换成后面的C_string

s.erase(13);//从索引13开始往后全删除

s.erase(7,5);//从索引7开始往后删5个

2.6提取子串和字符串连接

题取子串的函数是:substr(),形式如下:

s.substr();//返回s的全部内容

s.substr(11);//从索引11往后的子串

s.substr(5,6);//从索引5开始6个字符

把两个字符串结合起来的函数是+。(谁不明白请致电120)

2.7输入输出操作

1.>> 从输入流读取一个string。

2.<< 把一个string写入输出流。

另一个函数就是getline(),他从输入流读取一行内容,直到遇到分行符或到了文件尾。

2.8搜索与查找

查找函数很多,功能也很强大,包括了:

find()

rfind()

find_first_of()

find_last_of()

find_first_not_of()

find_last_not_of()

这些函数返回符合搜索条件的字符区间内的第一个字符的索引,没找到目标就返回npos。所有的函数的参数说明如下:

第一个参数是被搜寻的对象。第二个参数(可有可无)指出string内的搜寻起点索引,第三个参数(可有可无)指出搜寻的字符个数。比较简单,不多说不理解的可以向我提出,我再仔细的解答。当然,更加强大的STL搜寻在后面会有提及。

最后再说说npos的含义,string::npos的类型是string::size_type,所以,一旦需要把一个索引与npos相比,这个索引值必须是string::size)type类型的,更多的情况下,我们可以直接把函数和npos进行比较(如:if(s.find(“jia”

首页 上一页 1 2 3 4 5 下一页 尾页 2/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇使用C++语言实现银行管理系统基础.. 下一篇C++如何利用opencv实现人脸检测详..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目