网站用excel做数据库,番禺区保安服务公司,深圳做网站价格,淘宝搜索指数CSDN 文章目录 
前言 #x1f4ac; 欢迎讨论#xff1a;如果你在学习过程中有任何问题或想法#xff0c;欢迎在评论区留言#xff0c;我们一起交流学习。你的支持是我继续创作的动力#xff01; #x1f44d; 点赞、收藏与分享#xff1a;觉得这篇文章对你有帮助吗…CSDN 文章目录 
前言 欢迎讨论如果你在学习过程中有任何问题或想法欢迎在评论区留言我们一起交流学习。你的支持是我继续创作的动力  点赞、收藏与分享觉得这篇文章对你有帮助吗别忘了点赞、收藏并分享给更多的小伙伴哦你们的支持是我不断进步的动力  分享给更多人如果你觉得这篇文章对你有帮助欢迎分享给更多对C感兴趣的朋友让我们一起进步 C string 类从入门到精通  
1. string简介 
C 标准库中的 std::string 类是一个非常强大的工具用于处理和操作字符串。它属于 string 头文件并提供了一套丰富的功能和方法。以下是 std::string 类的一些主要特性和常用操作 字符串是表示字符序列的类  1. 标准的字符串类提供了对此类对象的支持其接口类似于标准字符容器的接口但添加了专门用于操作单字节字符字符串的设计特性。 2. string类是使用char(即作为它的字符类型使用它的默认char_traits和分配器类型(关于模板的更多信 息请参阅basic_string)。 3. string类是basic_string模板类的一个实例它使用char来实例化basic_string模板类并用char_traits 和allocator配置器作为basic_string的默认参数(根于更多的模板信息请参考basic_string)。  注意这个类独立于所使用的编码来处理字节:如果用来处理多字节或变长字符(如UTF-8)的序列这个 类的所有成员(如长度或大小)以及它的迭代器将仍然按照字节(而不是实际编码的字符)来操作。 总结  string是表示字符串的字符串类 该类的接口与常规容器的接口基本相同再添加了一些专门用来操作string的常规操作。string在底层实际是basic_string模板类的别名typedef basic_stringchar, char_traits, allocator string; 不能操作多字节或者变长字符的序列。 在使用string类时必须包含#iostream头文件以及using namespace std; 2. string 类的构造及基本接口函数 
2.1 string 类的构造方法 
string 类支持多种构造方式以下是常见的构造函数  下面简单演示上述多个函数如何使用和了解其功能代码如下 2.1.1 示例 
#includeiostream
using namespace std;int main()
{string s2(hello world);string s1;//构造一个空的字符串string s3(C);//使用字符串C构造s3对象string s4(10, c);//构造包含10个c的s4对象string s5(s2);//使用s2拷贝构造s5cout s1: s1  endl;cout s3: s3  endl;cout s4: s4  endl;cout s5: s5  endl;return 0;
} 
输出结果  s1: s3:C s4:cccccccccc s5:hello world 2.2 String类 常见的操作 #includeiostream
using namespace std;
int main()
{string s2(hello world);cout  s2  endl;cout  s2.size()  endl;cout  s2.length()  endl;cout  s2.capacity()  endl;s2.resize(5);cout  s2  endl;//cout  s2.reserve()  endl;s2.clear();if (s2.empty())cout  s2为空字符串  endl;else {cout  s2不为空字符串  endl;}s2.resize(100);cout  s2  endl;return 0;
} 
2.2.1 示例 hello world 11 11 15 hello s2为空字符串 补充resize使用示例  
#include iostream
#include string
using namespace std;int main() {string s  Hello;cout  Size:   s.size()  endl;     // 返回字符串长度cout  Capacity:   s.capacity()  endl;  // 返回容量s.resize(10, X);                        // 将长度改为10多出部分用X填充cout  Resized:   s  endl;s.clear();                                // 清空字符串cout  Is empty:   s.empty()  endl;  // 检查是否为空return 0;
}输出结果 Size: 5 Capacity: 15 Resized: HelloXXXXX Is empty: 1 注意  1. resize(size_t n) 与 resize(size_t n, char c)都是将字符串中有效字符个数改变到n个不 同的是当字符个数增多时resize(n)用\0来填充多出的元素空间resize(size_t n, char c)用字符c来填充多出的元素空间。注意resize在改变元素个数时如果是将元素个数增多可能会改变底层容量的大小如果是将元素个数减少底层空间总大小不变。2. reserve(size_t res_arg0)为string预留空间不改变有效元素个数当reserve的参数小于string的底层空间总大小时reserve不会改变容量大小。3. size和capacity都不包括’\0’。 2.3 字符串的遍历与访问 
常见字符串遍历方法接口interface 2.3.1 示例  
#includeiostream
#includestring
using namespace std;
int main()
{string s2(hello world);s2[0]  x;cout  s2  endl;couts2.at(1)  endl;//返回指定位置的对象string::iterator it  s2.begin();//迭代器遍历while (it ! s2.end()){cout  *it;it;}cout  endl;//范围for,auto自动推导类型for (auto it  s2.begin(); it ! s2.end(); it)cout  *it;cout  endl;return 0;
} 
输出结果  xello world e xello world xello world  3. string类 高级接口interface  
3.1 字符串的查找操作 
常见查找接口如下 C中string::npos的概念它是size_t的最大值表示字符串结束。 #define _CRT_SECURE_NO_WARNINGS 1
#includeiostream
using namespace std;int main()
{string s1(hello world hello bit!);//find的使用//在字符串中查找子字符串或字符返回其首次出现的位置找不到则返回 string::npossize_t ret  s1.find(e);if (ret  string::npos)printf(未找到\n);else{cout  ret:ret  endl;}size_t ret2  s1.find(o);if (ret2  string::npos)printf(未找到\n);else{cout  ret2:  ret2  endl;}//rfind的使用//反向查找字符串返回最后一次出现子串或字符的位置size_t ret3  s1.rfind(o);if (ret3  string::npos)printf(未找到\n);else{cout  ret3:  ret3  endl;}//find_first_of()	//查找指定字符集中的任意一个字符返回第一次出现的索引size_t ret4s1.find_first_of(b);if (ret4  string::npos)printf(未找到\n);else{cout  ret4:  ret4  endl;}size_t ret5  s1.find_first_of(bit);if (ret5  string::npos)printf(未找到\n);else{cout  ret5:  ret5  endl;}size_t ret6  s1.find_last_of(t);if (ret6  string::npos)printf(未找到\n);else{cout  ret6:  ret6  endl;}size_t ret7  s1.find_last_of(bi);if (ret7  string::npos)printf(未找到\n);else{cout  ret7:  ret7  endl;}return 0;
} 
输出结果  ret:1 ret2:4 ret3:16 ret4:18 ret5:18 ret6:20 ret7:19 3.1.1 相关链接 
C string::find() 文档C string::rfind() 文档C string::find_first_of() 文档C string::find_last_of() 文档 
3.2 字符串的比较操作 这几个接口比较简单日期类实现过这里就不再重复了. 
3.3 字符串的替换操作 3.3.1 相关链接 
C string::replace() 文档 3.3.2 示例 #includeiostream
using namespace std;int main()
{//我们将wzy换成Cstring s1(hello wzy hello java!);cout  s1  endl;s1.replace(6, 3, C);//将string s1开始的第六个字符的后面三个字符换成Ccout  s1  endl;return 0;
} 输出结果 hello wzy hello java! hello C hello java! 3.4 字符串的截取操作 3.4.1 示例: 
#includeiostream
using namespace std;int main()
{string s1(hello wzy hello java!);string s2s1.substr(10, 11);//cout  s2  endl;return 0;
} 
输出结果  hello wzy hello java! hello java!   3.4.2 相关链接 
C string::substr() 文档 
3.5 字符串的插入与删除操作 补充 由于C是很注重效率的编程语言上诉两个接口函数插入数据前均需要移动原有数据效率低下不建议使用。 
3.5.1 示例 
#includeiostream
using namespace std;int main()
{string s1(hello wzy hello java!);cout  orign staus:s1  endl;s1.insert(6, n);cout  After insert:s1  endl;s1.erase(6,1);cout  After erase:  s1  endl;s1.erase(5);cout  After erase:  s1  endl;return 0;
} 
输出结果 orign staus:hello wzy hello java! After insert:hello nwzy hello java! After erase:hello wzy hello java! After erase:hello   3.5.2 相关链接 
C string::insert() 文档C string::erase() 文档 
3.6 字符串与整数的转换 #includeiostream
#includestring
using namespace std;int main()
{int num  20;string s1  to_string(num);//将数值转换为字符串cout  s1  endl;string s123456;int sNumstoi(s);//将字符串转换为整数cout  sNum  endl;string s3(123);float s4  stof(s3);//将字符串转换为浮点数cout  s4  endl;return 0;
} 输出结果 20 123456 123 3.6.2 相关链接 
C to_string() 文档C stoi()文档stof - C Reference文档 最后 
相信通过这篇文章你对CSTL-string的使用高级部分的有了初步的了解。如果此篇文章对你学习C有帮助期待你的三连你的支持就是我创作的动力 
下一篇文章再会.