find & substr
根据分隔符选择需要的子串
#include <iostream>#include <string>using namespace std;int main(){string findee = "This-is-a-string";string finder = "This";string::size_type n1, n2, n3;if ((n1 = findee.find(finder, 0)) != string::npos){n2 = findee.find("-", n1);n3 = findee.find("-", n2 + 1);string sub1, sub2;sub1 = findee.substr(n1, n2 - n1);sub2 = findee.substr(n2 + 1, n3 - 1 - n2);cout << n1 << "," << n2 << "," << n3 << endl;cout << findee << endl;cout << sub1 << endl;cout << sub2 << endl;}elsecout << "No found.\n";}// 输出0,4,7This-is-a-stringThisis
模糊查询
查询所有的“小二”
#include <iostream>#include <string>using namespace std;int main(){string findee = "-王小二-88-张小二-90-";string finder = "小二";string::size_type n1, n2, n3, last_pos = 0;cout << "finder: " << finder << endl;while (true){string::size_type pos = findee.find(finder, last_pos);if (pos != string::npos){n1 = findee.rfind("-", pos); // 找到名字前面的 "-"n2 = findee.find("-", pos);string name = findee.substr(n1 + 1, n2 - n1 - 1);cout << name << endl;last_pos = n2;}elsebreak;}return 0;}// 输出finder: 小二王小二张小二
字符串倒序
注意,字符串string的 [] 运算符是只读的,不可写,所以需要建立一个字符串 temp 进行赋值
#include <iostream>#include <string>using namespace std;void reverse(string &str){int i, len = str.size();string temp = str;for (i = 0; i < len; ++i){temp[i] = str[len - 1 - i];}str = temp;}int main(){string str = "你是谁";reverse(str);cout << str << endl;return 0;}
字符串偏移(加密)
#include <iostream>#include <string>using namespace std;#include <iostream>#include <string>using namespace std;void encode(string &str){int i, len = str.size();string temp = str;for (i = 0; i < len; ++i){temp[i] = str[len - 1 - i];}str = temp;}void decode(string &str){int i, len = str.size();string temp = str;for (i = 0; i < len; ++i){temp[i] = str[len - 1 - i] - 15;}str = temp;}int main(){string str = "asddsa";encode(str);decode(str);cout << str << endl;return 0;}// 输出
