C++primer_顺序容器之string操作
2015-11-09 22:08
483 查看
本例以代码形式整理了C++primer第九章string操作的基本函数方法,其中每个函数 的作用在代码注释中解释到位,若是仍有疑惑,请仔细阅读课本习题
测试效果如下
#include <iostream> #include<string> #include<vector> using namespace std; void replace_string(string &s, const string &oldVal, const string &newVal)//最原始的字符串迭代器进行对比替换 { auto l = oldVal.size(); if (!l) return; auto iter = s.begin(); while (iter <= s.end() - 1) { auto iter1 = iter; auto iter2 = oldVal.begin(); while (iter2 !=oldVal.end()&& *iter1==*iter2) { iter1++; iter2++; } if (iter2 == oldVal.end()) { iter = s.erase(iter, iter1); if (newVal.size()) { iter2 == newVal.end();//出现错误直接崩溃 do { iter2--; iter = s.insert(iter, *iter2); } while (iter2>newVal.begin()); } iter += newVal.size(); } else iter++; } } void replacestring(string&s, const string &oldVal, const string &newVal)//直接利用标准库里面的函数操作字符串极大地简化了string的操作 { int p = 0; while ((p=s.find(oldVal,p))!=string::npos) { s.replace(p, oldVal.size(), newVal); p += newVal.size(); } } void name_string(string&name, const string &prefix, const string &suffix)//利用迭代器来进行插入和尾增操作 { name.insert(name.begin(), 1, ' '); name.insert(name.begin(), prefix.begin(), prefix.end()); name.append(" "); name.append(suffix.begin(), suffix.end()); } void namestring(string &name, const string&prefix, const string &suffix)//按长度和位置进行string管理 { name.insert(0, " "); name.insert(0, prefix); name.insert(name.size(), " "); name.insert(name.size(), suffix); } void find_char(string&s, const string&chars)//直接利用find_first_of(s,chars)函数进行查找返回值为一个string::npos的特殊值,有返回字符串,没有返回npos { cout << "在" << s << "中查找" << chars << "中字符" << endl; string::size_type pos = 0; while ((pos = s.find_first_of(chars,pos))!=string::npos) { cout << "pos: " << pos<<",char: " << s[pos] << endl; pos++; } } void find_not_char(string&s, const string&chars)//直接利用find_first_of(s,chars)函数进行查找返回值为一个string::npos的特殊值,有返回字符串,没有返回npos { cout << "在" << s << "中查找不在" << chars << "中字符" << endl; string::size_type pos = 0; while ((pos = s.find_first_not_of(chars, pos)) != string::npos) { cout << "pos: " << pos << ",char: " << s[pos] << endl; pos++; } } float SumStringInt(const vector<string> &sub)//无限整数相加,不牵扯整数大小可以是stoi(string)到int,也可以是stof(string)是float { auto sum=0; for (auto iter = sub.begin(); iter != sub.end(); iter++) sum += stof(*iter); return sum; } int main(int argc, char **argv) { string s = "tho thru tho !"; //replacestring(s, "thru", "through"); //replace_string(s, "thru", "through"); name_string(s, "nihao", "wobuhao"); cout << s << endl; string p = "123sdv546dbjy64vs4"; find_char(p, "1234567890"); find_not_char(p, "1234567890"); vector<string>sumint{"12","3456","+102","-129","+12"}; cout << SumStringInt(sumint)<<endl; system("pause"); return 0; }
测试效果如下
相关文章推荐
- C++ primer plus Sales_item.h源码
- 关于c++顺序容器小结(二)---基本操作
- 3.c/c++程序员面试宝典-变量
- DOxygen for C++使用说明——注释代码二
- C++ 在继承中虚函数、纯虚函数、普通函数,三者的区别
- c++用gsoap调用webservice备忘
- Visual Studio 2010中C++项目升级指南
- vc++从txt文件中读取数据
- c++中虚函数和纯虚函数定义
- c语言中的各种printf
- DOxygen for C++使用说明——Markdown支持
- 【黑马程序员】 我的C语言学习笔记(1)数据类型
- 排序算法之冒泡排序
- C++设计模式[八]装饰模式
- C++学习——父类指针和子类指针的步长问题
- C++学习路线
- c与c++中enum和struct定义的区别
- C++学习——多态原理
- C语言笔记(结构体与offsetof、container_of之前的关系)
- 栈在程序中的作用(ARM结构)