image.png

find & substr

根据分隔符选择需要的子串

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. int main()
  5. {
  6. string findee = "This-is-a-string";
  7. string finder = "This";
  8. string::size_type n1, n2, n3;
  9. if ((n1 = findee.find(finder, 0)) != string::npos)
  10. {
  11. n2 = findee.find("-", n1);
  12. n3 = findee.find("-", n2 + 1);
  13. string sub1, sub2;
  14. sub1 = findee.substr(n1, n2 - n1);
  15. sub2 = findee.substr(n2 + 1, n3 - 1 - n2);
  16. cout << n1 << "," << n2 << "," << n3 << endl;
  17. cout << findee << endl;
  18. cout << sub1 << endl;
  19. cout << sub2 << endl;
  20. }
  21. else
  22. cout << "No found.\n";
  23. }
  24. // 输出
  25. 0,4,7
  26. This-is-a-string
  27. This
  28. is

模糊查询

查询所有的“小二”

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. int main()
  5. {
  6. string findee = "-王小二-88-张小二-90-";
  7. string finder = "小二";
  8. string::size_type n1, n2, n3, last_pos = 0;
  9. cout << "finder: " << finder << endl;
  10. while (true)
  11. {
  12. string::size_type pos = findee.find(finder, last_pos);
  13. if (pos != string::npos)
  14. {
  15. n1 = findee.rfind("-", pos); // 找到名字前面的 "-"
  16. n2 = findee.find("-", pos);
  17. string name = findee.substr(n1 + 1, n2 - n1 - 1);
  18. cout << name << endl;
  19. last_pos = n2;
  20. }
  21. else
  22. break;
  23. }
  24. return 0;
  25. }
  26. // 输出
  27. finder: 小二
  28. 王小二
  29. 张小二

字符串倒序

注意,字符串string的 [] 运算符是只读的,不可写,所以需要建立一个字符串 temp 进行赋值

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. void reverse(string &str)
  5. {
  6. int i, len = str.size();
  7. string temp = str;
  8. for (i = 0; i < len; ++i)
  9. {
  10. temp[i] = str[len - 1 - i];
  11. }
  12. str = temp;
  13. }
  14. int main()
  15. {
  16. string str = "你是谁";
  17. reverse(str);
  18. cout << str << endl;
  19. return 0;
  20. }

字符串偏移(加密)

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. #include <iostream>
  5. #include <string>
  6. using namespace std;
  7. void encode(string &str)
  8. {
  9. int i, len = str.size();
  10. string temp = str;
  11. for (i = 0; i < len; ++i)
  12. {
  13. temp[i] = str[len - 1 - i];
  14. }
  15. str = temp;
  16. }
  17. void decode(string &str)
  18. {
  19. int i, len = str.size();
  20. string temp = str;
  21. for (i = 0; i < len; ++i)
  22. {
  23. temp[i] = str[len - 1 - i] - 15;
  24. }
  25. str = temp;
  26. }
  27. int main()
  28. {
  29. string str = "asddsa";
  30. encode(str);
  31. decode(str);
  32. cout << str << endl;
  33. return 0;
  34. }
  35. // 输出