今天继续写一些string操作。

string给我们提供了非常多的方法,可是每在使用的时候,就要费些周折。

场景1:

得到一个std::string full_path = “D:\program files\csdn”。可是我想得到”D:\program files\vagaa”这个路径。

这就须要字符串的替换

std::string full_path = "D:\\program files\\csdn"
const size_t last_slash_idx1 = full_path .find_last_of("\\/");
if (std::string::npos != last_slash_idx1)
{
full_path.erase(last_slash_idx1, std::string::npos);
}
std::string my_path = full_path + "\\vagaa";

这里用到了string的* find_last_of*方法,并使用了erase方法进行删除。

场景2:

得到一个std::string full_image_path = “D:\program files\csdn\vagaa.png”,可是我想依据这个路径得到文件的扩展名。

我们能够使用find_last_of+erase方法进行。还能够这么做:

std::string full_image_path = "D:\\program files\\csdn\\vagaa.png"
std::string file_extension_name;
size_t i = full_image_path .rfind('.', file_path.length());
if (i != string::npos) {
file_extension_name = full_image_path .substr(i + 1, full_image_path .length() - i);
}

此时用到了string的rfind方法和substr方法

场景3

===============================================================

基本知识:

出自博客http://www.cnblogs.com/xFreedom/archive/2011/05/16/2048037.html

string类的构造函数:

string(const char *s); //用c字符串s初始化

string(int n,char c); //用n个字符c初始化

此外。string类还支持默认构造函数和复制构造函数。如string s1;string s2=”hello”。都是正确的写法。当构造的string太长而无法表达时会抛出length_error异常 。

string类的字符操作:

const char &operator[](int n)const;

const char &at(int n)const;

char &operator[](int n);

char &at(int n);

operator[]和at()均返回当前字符串中第n个字符的位置,但at函数提供范围检查。当越界时会抛出out_of_range异常,下标运算符[]不提供检查訪问。

const char *data()const;//返回一个非null终止的c字符数组

const char *c_str()const;//返回一个以null终止的c字符串

int copy(char *s, int n, int pos = 0) const;//把当前串中以pos開始的n个字符复制到以s为起始位置的字符数组中。返回实际拷贝的数目

string的特性描写叙述:

int capacity()const; //返回当前容量(即string中不必添加内存就可以存放的元素个数)

int max_size()const; //返回string对象中可存放的最大字符串的长度

int size()const; //返回当前字符串的大小

int length()const; //返回当前字符串的长度

bool empty()const; //当前字符串是否为空

void resize(int len,char c);//把字符串当前大小置为len,并用字符c填充不足的部分

string类的输入输出操作:

string类重载运算符operator>>用于输入,相同重载运算符operator<<用于输出操作。

函数getline(istream &in,string &s);用于从输入流in中读取字符串到s中,以换行符’\n’分开。

string的赋值:

string &operator=(const string &s);//把字符串s赋给当前字符串

string &assign(const char *s);//用c类型字符串s赋值

string &assign(const char *s,int n);//用c字符串s開始的n个字符赋值

string &assign(const string &s);//把字符串s赋给当前字符串

string &assign(int n,char c);//用n个字符c赋值给当前字符串

string &assign(const string &s,int start,int n);//把字符串s中从start開始的n个字符赋给当前字符串

string &assign(const_iterator first,const_itertor last);//把first和last迭代器之间的部分赋给字符串

string的连接:

string &operator+=(const string &s);//把字符串s连接到当前字符串的结尾

string &append(const char *s); //把c类型字符串s连接到当前字符串结尾

string &append(const char *s,int n);//把c类型字符串s的前n个字符连接到当前字符串结尾

string &append(const string &s); //同operator+=()

string &append(const string &s,int pos,int n);//字符串中从pos開始的n个字符连接到当前字符串的结尾

string &append(int n,char c); //在当前字符串结尾加入n个字符c

string &append(const_iterator first,const_iterator last);//把迭代器first和last之间的部分连接到当前字符串的结尾

string的比較:

bool operator==(const string &s1,const string &s2)const;//比較两个字符串是否相等

运算符”>”,”<”,”>=”,”<=”,”!=”均被重载用于字符串的比較;

int compare(const string &s) const;//比較当前字符串和s的大小

int compare(int pos, int n,const string &s)const;//比較当前字符串从pos開始的n个字符组成的字符串与s的大小

int compare(int pos, int n,const string &s,int pos2,int n2)const;

int compare(const char *s) const;

int compare(int pos, int n,const char *s) const;

int compare(int pos, int n,const char *s, int pos2) const;

compare函数在>时返回1。<时返回-1,==时返回0

string的子串:

string substr(int pos = 0,int n = npos) const;//返回pos開始的n个字符组成的字符串

string的交换:

void swap(string &s2); //交换当前字符串与s2的值

string类的查找函数:

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的值

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_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, int 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(const 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, 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);//删除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(iterator 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, iterator 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 &insert(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处插入[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类的迭代器处理:

string类提供了向前和向后遍历的迭代器iterator,迭代器提供了訪问各个字符的语法,类似于指针操作。迭代器不检查范围。

用string::iterator或string::const_iterator声明迭代器变量。const_iterator不同意改变迭代的内容。经常使用迭代器函数有:

const_iterator begin()const;

iterator begin(); //返回string的起始位置

const_iterator end()const;

iterator end(); //返回string的最后一个字符后面的位置

const_iterator rbegin()const;

iterator rbegin(); //返回string的最后一个字符的位置

const_iterator rend()const;

iterator rend(); //返回string第一个字符位置的前面

rbegin和rend用于从后向前的迭代訪问。通过设置迭代器string::reverse_iterator,string::const_reverse_iterator实现

实战c++中的string系列--string的替换、查找(一些与路径相关的操作)的更多相关文章

  1. 实战c++中的vector系列--vector应用之STL的find、find_if、find_end、find_first_of、find_if_not(C++11)

    使用vector容器,即避免不了进行查找,所以今天就罗列一些stl的find算法应用于vector中. find() Returns an iterator to the first element ...

  2. 实战c++中的vector系列--再谈vector的insert()方法(都是make_move_iterator惹的祸)

    之前说过了关于vector的insert()方法,把vector B的元素插入到vector A中.vector A中的结果我们可想而知,可是vector B中的元素还会怎样? 看看之前写过的程序: ...

  3. 实战c++中的vector系列--正确释放vector的内存(clear(), swap(), shrink_to_fit())

    关于vector已经写的差不多了,似乎要接近尾声了,从初始化到如何添加元素再到copy元素都有所涉及,是时候谈一谈内存的释放了. 是的,对于数据量很小的vector,完全没必要自己进行主动的释放,因为 ...

  4. 实战c++中的string系列--string与char*、const char *的转换(data() or c_str())

    在project中,我们也有非常多时候用到string与char*之间的转换,这里有个一我们之前提到的函数 c_str(),看看这个原型: const char *c_str(); c_str()函数 ...

  5. String系列-----String

    jdk源码学习之String,手动实现一个String package com.amazing.jdk.string_2017_12_31; import java.io.Serializable; ...

  6. 实战c++中的vector系列--知道emplace_back为何优于push_back吗?

    上一篇博客说道vector中放入struct.我们先构造一个struct对象.再push_back. 那段代码中,之所以不能使用emplace_back,就是由于我们定义的struct没有显示的构造函 ...

  7. 实战c++中的vector系列--copy set to vector(别混淆了reserve和resize)

    stl算法中有个copy函数.我们能够轻松的写出这种代码: #include <iostream> #include <algorithm> #include <vect ...

  8. 实战c++中的vector系列--creating vector of local structure、vector of structs initialization

    之前一直没有使用过vector<struct>,如今就写一个简短的代码: #include <vector> #include <iostream> int mai ...

  9. 实战c++中的vector系列--emplace_back造成的引用失效

    上篇将了对于struct或是class为何emplace_back要优越于push_back,可是另一些细节没有提及.今天就谈一谈emplace_back造成的引用失效. 直接撸代码了: #inclu ...

随机推荐

  1. js变量作用域和闭包的示例

    <script> /* js是函数级作用域,在函数内部的变量,内部都能访问, 外部不能访问内部的,但是内部可以访问外部的变量 闭包就是拿到本不该属于他的东西,闭包会造成内存泄漏,你不知道什 ...

  2. webService接口发布失败问题

    今天在原有工程上新增加了个webService接口的服务类,但是总提示 axis2 出错 File "/axis2-web/listSingleService.jsp" not f ...

  3. git error: object file .git/objects/b9/e269f50db2a3415cc8ad5ba40b82b9b6a13d45 is empty

    错误现象: 解决方法: 1.  find .git/objects/ -type f -empty | xargs rm 2. git fetch -p 3. git fsck --full

  4. [洛谷P3121] 审查(黄金) (AC自动机)

    题目描述 FJ把杂志上所有的文章摘抄了下来并把它变成了一个长度不超过10^5的字符串S.他有一个包含n个单词的列表,列表里的n个单词记为t_1...t_N.他希望从S中删除这些单词. FJ每次在S中找 ...

  5. 【Educational Codeforces Round 37 F】SUM and REPLACE

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 那个D函数它的下降速度是很快的. 也就是说到最后他会很快的变成2或者1 而D(2)==2,D(1)=1 也就是说,几次操作过后很多数 ...

  6. impala jdbc4的group by语句的bug,加上limit没错

    这里用的ImpalaJDBC4.jar SELECT field1 alias1 FROM table1 where field1 ='xxxx' group by alias1 这句话impala会 ...

  7. [Poi] Use Poi to Build an Index.js with Modern JavaScript Features

    Poi can easily launch an index.js file simply by running the poi command. This will launch a dev-ser ...

  8. EBS 第一个项目 学习总结 ---- 发运模块

    EBS 组织架构: (一)业务组(BG) (二)法律实体(LE) (三)业务实体(OU) (四)库存组织(INV) (五)公司成本中心(Cost Center) (六)HR组织 (七)多组织接入控制 ...

  9. 给QQ群发送消息

    地址:http://d.web2.qq.com/channel/send_qun_msg2 方式:POST 參数: r  = {"group_uin":2393471267,&qu ...

  10. 影响FPGA设计中时钟因素的探讨。。。转

    http://www.fpga.com.cn/advance/skill/speed.htm http://www.fpga.com.cn/advance/skill/design_skill3.ht ...