title: string类的基本用法date: 2020-12-5 22:44:41
tags: C++
categories: 类库

  1. #include <iostream>
  2. #include <stack>
  3. #include <vector>
  4. #include <string>
  5. using namespace std;
  6. void fun_at()
  7. {
  8. //a.at(index) 访问(access)串指定位置的元素
  9. string a = "012345";
  10. a.at(0) = 'a';
  11. cout << a << endl; //a12345
  12. char t = a.at(1);
  13. cout << t << endl; //1
  14. }
  15. void fun_find_erase_length()
  16. {
  17. //a.length() 返回串的长度
  18. //a.find(&str) 查找子串的位置
  19. //a.erase(pos,len) 删除串元素
  20. string m, n;
  21. m = n = "012345";
  22. m.erase(m.length()-2, 1);
  23. n.erase();
  24. cout << m << endl; //01235
  25. cout << n << endl; //null
  26. //查找子串个数
  27. string a = "abcdef ab cdabccd";
  28. string b = "cd";
  29. int sum = 0;
  30. while (1)
  31. {
  32. int pos;
  33. int len;
  34. pos = a.find(b);
  35. len = b.length();
  36. if (pos == -1) break;
  37. else {
  38. sum++;
  39. a.erase(pos, len);
  40. }
  41. }
  42. cout << sum << endl; //3
  43. }
  44. void fun_append()
  45. {
  46. //1.拼接两个串 basic_string &append( const basic_string &str );
  47. string a1 = "012345";
  48. string b1 = "ab";
  49. a1.append(b1);
  50. cout << a1 << endl; //012345ab
  51. //2.末尾添加num个字符 ch basic_string &append( size_type num, char ch );
  52. string a2 = "012345";
  53. char b2 = 'a';
  54. a2.append(4, b2);
  55. cout << a2 << endl; //012345aaaa
  56. //3.添加str的子串,子串以index索引开始,长度为len basic_string &append( const basic_string &str, size_type index, size_type len );
  57. string a3 = "012345";
  58. string b3 = "abcde";
  59. a3.append(b3, 0, 3);
  60. cout << a3 << endl; //012345abc
  61. }
  62. void fun_replace()
  63. {
  64. //str ""包含的串 "串"其实返回的也是地址
  65. string a1 = "012345";
  66. a1.replace(0, 0, "abcd"); //len2默认为全长,此时为4
  67. cout << a1 << endl; //abcd012345
  68. //str 字符数组
  69. string a2 = "012345"; char b2[10] = "abcd";
  70. a2.replace(1, 1, b2,3);
  71. cout << a2 << endl; //0abc2345
  72. //str string 函数原型多一个参数(index1,len1,str,index2,len2)index2默认为0,len2默认为str全长
  73. string a3 = "012345", b3 = "abcd";
  74. a3.replace(0, 0, b3);
  75. cout << a3 << endl; //abcd012345
  76. a3 = "012345"; b3 = "abcd";
  77. a3.replace(0, 0, b3, 1, 1);
  78. cout << a3 << endl; //b012345
  79. }
  80. void fun_a_c_str()
  81. {
  82. //a.c_str() 返回串的首个元素的地址
  83. string a = "012345";
  84. const char* p = a.c_str();
  85. cout << *p << endl; //0
  86. }
  87. void fun_push_back()
  88. {
  89. string a = "";
  90. char t = 'd';
  91. a.push_back('c');
  92. a.push_back(t);
  93. cout << a << endl; //cd
  94. }
  95. int main()
  96. {
  97. //string 类的基本用法
  98. //a.at(index) 访问串指定位置的元素,(index为下标,与字符数组统一)
  99. //a.length() 返回串的长度
  100. //a.find(&str) 查找子串的位置(返回值为下标,查找失败返回 -1 )
  101. //a.c_str() 返回串的首个元素的地址(返回值类型为const char *类型)
  102. //a.append() 1.拼接两个串 2.末尾添加num个字符ch 3.添加str的子串,子串以index索引开始,长度为len
  103. //a.erase(index) 删除串元素
  104. //a.clear() 清空串 a = ""一样
  105. //a.empty() 查看串是否空了 返回1说明空串,非空串返回0
  106. //pop_back() 删除尾元素
  107. //a.replace(index,len1,&str,len2) 剪切粘贴函数 先剪切再粘贴,粘贴可以比剪切长,自动位移
  108. //a.begin() 正向的迭代器,返回一个指向串第一个元素的指针 >>1.访问第一个元素 *(a.begin()) >>2.访问第二个元素 *(a.begin()+1)
  109. //a.end() 正向的迭代器,返回一个指向串最后一个元素还要后一位的指针 >>1.访问最后一个元素 *(a.end()-1) >>2. 访问倒二个元素 *(a.end()-2)
  110. //a.rbegin() 反向迭代器,返回一个指向最后一个元素的指针 >>1.访问最后一个元素 *(a.rbegin()) >>2.访问倒二个元素 *(a.rbegin()+1)
  111. //a.rend() 反向迭代器,返回一个指向第一个元素还要前一位的指针 >>1.访问第一个元素 *(a.rend()-1) >>2.访问第二个元素 *(a.rbegin()-2)
  112. return 0;
  113. }