当前位置:   article > 正文

string常用的操作_string指令

string指令

目录

容量

增加操作

insert

push_back

append

operator+=

查找操作

删除操作

clear

erase

pop_back(C++11)

更改操作

其他操作


容量

empty:检查 string 是否无字符,即是否 begin() == end() 

size/length:返回 string 中的 CharT 元素数,即 std::distance(begin(), end()) 。

reserve:保留存储

capacity:返回当前对象分配的存储空间能保存的字符数量

代码演示:

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. int main()
  5. {
  6. string s;
  7. //bool empty() const;
  8. if (s.empty()) {
  9. cout << "s is empty" << endl;
  10. }//s is empty
  11. s = "C++";
  12. //size_type size() const;
  13. cout << s.size() << endl;//3
  14. //size_type length() const;
  15. cout << s.length() << endl;//3
  16. //size_type capacity() const;
  17. cout << s.capacity() << endl;//15
  18. //void reserve( size_type new_cap = 0 );
  19. s.reserve(100);
  20. cout << s.capacity() << endl;//111
  21. return 0;
  22. }

运行结果

增加操作

insert

  1. 在位置 index 插入 count 个字符 ch 的副本。
  2. 在位置 index 插入 s 所指向的空终止字符串。字符串的长度由首个空字符,通过 Traits::length(s) 确定。
  3. 在位置 index 插入字符串 str
  4. 在 pos 所指向的字符前插入字符 ch
  5.  在 pos 所指向的元素(如果存在)前插入 count 个字符 ch 的副本。

代码演示

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. string s;
  6. // insert(size_type index, size_type count, char ch)
  7. s.insert(0, 2, '+');
  8. cout << "s1:" << s << endl;
  9. // insert(size_type index, const char* s)
  10. s.insert(0, "C");
  11. cout << "s1:" << s << endl;
  12. // insert(size_type index, string const& str)
  13. string s2 = "~";
  14. s2.insert(0, s);
  15. cout << "s2:" << endl;
  16. // insert(const_iterator pos, char ch)
  17. s2.insert(s2.begin(), '>');
  18. cout << "s2:" << s2 << endl;
  19. // insert(const_iterator pos, size_type count, char ch)
  20. s2.insert(s2.begin() + s2.find_first_of('~') + 1, 2, '>');
  21. cout << "s2:" << s2 << endl;
  22. return 0;
  23. }

 运行结果:

push_back

后附给顶字符ch到字符串尾

constexpr void push_back( CharT ch );

代码演示

append

  1. 后附 count 个 ch 的副本
  2. 后附 string str
  3. 后附 str 的子串 [pos, pos+count) 。若请求的子串越过 string 结尾,或若 count == npos ,则后附的子串为 [pos, size()) 。。
  4. 后附 s 所指向的空终止字符串。由首个空字符用 Traits::length(s) 确定字符串的长度
  5. 后附范围 [s, s + count) 中的字符。此范围能含有空字符

代码演示

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. int main()
  5. {
  6. string s1 = " string ";
  7. string str;
  8. //string& append(size_type count,CharT ch);
  9. str.append(3, '*');
  10. cout << str << endl;
  11. //string& append( const basic_string& str )
  12. str.append(s1);
  13. cout << str << endl;
  14. //string& append( const basic_string& str,
  15. // size_type pos, size_type count );
  16. str.append(s1, 1, 3);
  17. cout << str << endl;
  18. //string& append( const CharT* s );
  19. const char* s = " is wrong";
  20. str.append(s);
  21. cout << str << endl;
  22. //string& append( const CharT* s, size_type count );
  23. const char* c = "####";
  24. str.append(c, 2);
  25. cout << str << endl;
  26. }

 运行结果:

operator+=

  1. 后附 string str 。
  2. 后附字符 ch 。
  3.  后附 s 所指向的空终止字符串。
  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. string s1 = "I ";
  6. string s2 = " am ";
  7. const char* c = "Jack";
  8. //string& operator+=( const basic_string& str );
  9. s1 += s2;
  10. cout << s1 << endl;
  11. // string& operator+=( CharT ch );
  12. s1 += c;
  13. cout << s1 << endl;
  14. //string& operator+=( const CharT* s );
  15. s1 += '!';
  16. cout << s1 << endl;
  17. return 0;
  18. }

运行结果:

 

查找操作

find

寻找首个等于给定字符序列的子串。搜索始于 pos ,即找到的子串必须不始于 pos 之前的位置。

  1. 寻找等于 str 的首个子串。
  2.  寻找等于范围 [s, s+count) 的首个子串。此范围能含空字符。
  3. 寻找等于 s 所指向的字符串的首个子串。由首个空字符,用 Traits::length(s) 确定字符串长度。
  4. 寻找首个字符 ch (由后述规则当作单字节子串)。

代码演示

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. int main()
  5. {
  6. string const s = "This is a string";
  7. //size_type find(const basic_string & str,
  8. // size_type pos = 0) const;
  9. string s2 = "str";
  10. cout << s.find(s2) << endl;
  11. //size_type find( const CharT* s, size_type pos, size_type count ) const;
  12. int n = s.find("is");
  13. cout << n << endl;
  14. n = s.find("is", 5);
  15. cout << n << endl;
  16. //size_type find(CharT ch, size_type pos = 0) const;
  17. n = s.find('a');
  18. cout << "'a'=" << n << endl;
  19. n = s.find('p');
  20. cout << "'p'=" << n << endl;
  21. return 0;
  22. }

运行结果 

 rfind:反向搜索字符串,操作和上述的find函数类似。

删除操作

clear

清除内容
如同通过执行 erase(begin(), end()) 从 string 移除所有字符。

constexpr void clear() noexcept;

代码演示: 

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. int main()
  5. {
  6. string s{ "String" };
  7. cout << "before:" << s << endl;
  8. s.clear();
  9. cout << "after:" << s << endl;
  10. cout << s.capacity() << endl;
  11. cout << s.size() << endl;
  12. return 0;
  13. }

 运行结果:

 

erase

从字符串移除指定的字符

  1. 移除从 index 开始的 std::min(count, size() - index) 个字符。
  2.  移除位于 position 的字符。
  3. 移除范围 [first, last) 中的字符。

 代码演示

  1. #include <iostream>
  2. #include <string>
  3. #include <algorithm>
  4. using namespace std;
  5. int main()
  6. {
  7. string s1 = "This is a string.";
  8. cout << "1:" << s1 << endl;
  9. //string& erase( size_type index = 0, size_type count = npos );
  10. s1.erase(7, 2);
  11. cout << "1:" << s1 << endl;
  12. //iterator erase( const_iterator position );
  13. //find(s1.begin(), s1.end(), ' ')返回查找字符的迭代器
  14. s1.erase(find(s1.begin(), s1.end(), ' '));
  15. cout << "2:" << s1 << endl;
  16. //iterator erase( const_iterator first, const_iterator last );
  17. s1.erase(s1.begin(), s1.end());
  18. cout << "3:" << s1 << endl;
  19. return 0;
  20. }

运行结果:

 

pop_back(C++11)

从字符串中移除末字符,等价于 erase(end() - 1, 1) 。若字符串为空则行为未定义。

constexpr void pop_back();

更改操作

replace

以新字符串替换 [pos, pos + count) 或 [first, last) 所指示的 string 部分

resize

重设 string 大小以含 count 个字符。

若当前大小小于 count ,则后附额外的字符。

若当前大小大于 count ,则缩减 string 到为其首 count 个元素。

swap

交换 string 与 other 的内容。可能非法化所有迭代器和引用。

代码演示

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. string s = "This are a string";
  6. //string& replace(size_type pos, size_type count,
  7. // const string & str);
  8. s.replace(5, 3, "is");
  9. cout << s << endl;
  10. string s1 = "That";
  11. //string& replace( const_iterator first, const_iterator last,
  12. // const string& str );
  13. s.replace(s.begin(), s.begin()+4,s1);
  14. cout << s << endl;
  15. //void resize( size_type count, CharT ch );
  16. s.resize(10, 'a');
  17. cout << s << endl;
  18. s.resize(20, 'a');
  19. cout << s << endl;
  20. cout << "s:" << s << endl;
  21. cout << "s1:" << s1 << endl;
  22. //void swap(string & other);
  23. s.swap(s1);
  24. cout << "s:" << s << endl;
  25. cout << "s1:" << s1 << endl;
  26. return 0;
  27. }

运行结果

 

其他操作

compare

比较两个字符序列。

返回值:

  • *this 在字典序中先出现于参数所指定的字符序列时是负值。
  • 两个序列比较等价时为零。
  • *this 在字典序中后出现于参数所指定的字符序列时是正值。

substr()

返回子串 [pos, pos+count) 。若请求的字串越过字符串的结尾,即 count 大于 size() - pos

则返回的子串为 [pos, size()]。

copy

复制子串 [pos, pos+count) 到 dest 所指向的字符串。若请求的子串越过 string 结尾,或若 count == npos ,则复制的子串为 [pos, size()) 。产生的字符串不是空终止的。

代码演示

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. string s = "This is a cat";
  6. string s1 = "a cat";
  7. string s2 = "a cat";
  8. //int compare( const basic_string& str ) const;
  9. cout << "s - s1:" << s.compare(s1) << endl;
  10. cout << "s1 - s2:" << s1.compare(s2) << endl;
  11. //int compare( size_type pos1, size_type count1,
  12. // const basic_string& str ) const;
  13. cout << s.compare(s.find('a'), 5, s1) << endl;
  14. //string substr( size_type pos = 0, size_type count = npos ) const;
  15. cout << s.substr(0, 5) << endl;
  16. //size_type copy( CharT* dest, size_type count, size_type pos = 0 ) const;
  17. char c[15];
  18. int n = s.copy(c, sizeof(c), 0);
  19. cout << n << endl;
  20. c[n] = '\0';
  21. cout << "s:" << s << endl;
  22. cout << "c:" << c << endl;
  23. }

运行结果:

 本篇概述了字符串string最常用的几种操作,增删查改等。

参考网站:cppreference.com

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/490467
推荐阅读
相关标签
  

闽ICP备14008679号