当前位置: 首页 > news >正文

怎样做网站初中生快速排名软件哪个好

怎样做网站初中生,快速排名软件哪个好,外贸展示型模板网站,理财网网站开发源码h5目录 引言 一、C语言字符串 1.1 创建 C 字符串 1.2 字符串长度 1.3 字符串拼接 1.4 比较字符串 1.5 复制字符串 二、C字符串string类 2.1 解释 2.2 string构造函数 2.2.1 string() 默认构造函数 2.2.2 string(const char* s) 从 C 风格字符串构造 2.2.3 string(co…目录 引言 一、C语言字符串 1.1 创建 C 字符串 1.2 字符串长度 1.3 字符串拼接  1.4 比较字符串 1.5 复制字符串 二、C字符串string类 2.1 解释 2.2 string构造函数 2.2.1 string() 默认构造函数 2.2.2 string(const char* s) 从 C 风格字符串构造 2.2.3 string(const string str) 拷贝构造函数 2.2.4 string(int n, char c) 从重复字符构造 2.3 string类对象的容量操作函数 2.3.1 size()与length() 获取字符串的有效字符长度 2.3.2 capacity() 2.3.3 empty() 判断是否为空串 2.3.4 clear() 清空有效字符 2.3.5 reserve() 2.3.6 resize() 2.4 string类对象的访问及遍历操作 2.4.1 operator[] 2.4.2 迭代器访问 ① 正向迭代器 ②反向迭代器 疑惑 2.4.3 范围for循环 拓展 引言 当我们踏入编程的神秘世界就像是探险家踏上未知的大陆。C 字符串犹如传统的地图指引着我们从简单中发现力量然而小心不经意的错误就像深不见底的陷阱。️ 而在这个奇幻的编码森林中std::string 类则犹如一颗闪亮的宝石散发出现代的光辉。它是那把能解锁高级魔法的钥匙让我们能够探索更广阔的创造领域。✨ 本文将引导你踏上探索之旅穿越时间的长河探索 C 字符串 ️ 和 C std::string 类 的异同。无论你是选择继续弹奏古老的旋律还是驾驭现代的编码风潮都能在这里找到属于你的启示。一起开启这段奇妙的编程之旅吧 一、C语言字符串 当在 C 语言中处理字符串时主要是使用字符数组来表示字符串通常被称为 C 风格字符串。C 字符串是以 null 结尾的字符数组使用字符指针来访问字符串的各个字符。以下是关于 C 字符串的一些基本概念和操作 1.1 创建 C 字符串 C 字符串是由字符数组构成的以 null 终止也就是以字符 \0 表示字符串的结束。 char str[] Hello, world!; // 创建并初始化 C 字符串在上述代码中char str[] Hello, world!; 创建了一个字符数组 str 并初始化为 Hello, world!。这个字符数组的大小会自动根据初始化的内容进行分配且在该变量的作用域结束后会自动释放不需要显式地进行内存释放操作。 接下来我们介绍C中需要手动释放的案例 #include stdio.h #include string.hint main() {// 创建一个字符数组并初始化为Hellochar *c_str (char *)malloc(6 * sizeof(char));printf(C String: %s\n, c_str);// 错误忘记释放分配的内存导致内存泄漏// free(c_str);return 0; } 1.2 字符串长度 C 字符串的长度是不包括 null 终止符的字符数。 char str[] Hello, world!; int length strlen(str); // 获取字符串长度不包括 null 终止符1.3 字符串拼接  在 C 语言中拼接字符串需要使用库函数 strcat()。注意这需要预先分配足够大的内存来存放拼接后的字符串。 char str1[] Hello, ; char str2[] world!; char result[20]; // 预分配足够大的内存 strcpy(result, str1); // 复制第一个字符串 strcat(result, str2); // 拼接第二个字符串1.4 比较字符串 使用库函数 strcmp() 可以比较两个字符串是否相等。 char str1[] apple; char str2[] banana; int result strcmp(str1, str2); // 比较字符串返回 0 表示相等1.5 复制字符串 使用库函数 strcpy() 可以复制一个字符串到另一个字符串。 char source[] Copy this.; char destination[20]; // 预分配足够的内存 strcpy(destination, source); // 复制 source 到 destination二、C字符串string类 当我们进入C的世界我们会遇到一个强大而便捷的工具那就是std::string类。与C语言的字符数组不同C中的std::string为我们提供了更加安全和高效的字符串处理方式让我们在编码的旅途中更加游刃有余。 std::string类是C标准库中的一员它被设计用来处理字符串不仅能够存储文本数据还提供了丰富的方法来操作字符串避免了C语言中处理字符串时的许多繁琐问题。使用std::string我们可以更专注于业务逻辑而不必担心内存管理和其他细节。✨ 下面让我们一起来探索一下std::string的基本用法和一些特性看看它是如何让我们摆脱繁琐的字符数组操作更加轻松地处理字符串任务的。无论你是新手还是经验丰富的开发者std::string都会成为你编程工具箱中的一把利器。 2.1 解释 介绍Cstring之前补充一些知识点 string本质 string是C风格的字符串而string本质上是一个类。 string和char * 区别 char * 是一个指针。 string是一个类类内部封装了char*管理这个字符串是一个char*型的容器。 std::string str; // 创建一个空字符串2.2 string构造函数 如图所示是cplusplus官网中string类的全部构造函数。 笔者将介绍其中主要使用的几种。 2.2.1 string() 默认构造函数 std::string str; // 创建一个空字符串2.2.2 string(const char* s) 从 C 风格字符串构造 const char* cstr Hello, world!; std::string str(cstr); // 从 C 风格字符串构造2.2.3 string(const string str) 拷贝构造函数 使用一个string对象初始化另一个string对象。 std::string original Hello, world!; std::string str(original); // 从另一个字符串构造2.2.4 string(int n, char c) 从重复字符构造 std::string str(5, X); // 创建由 5 个 X 组成的字符串总结string的多种构造方式没有可比性灵活使用即可。 2.3 string类对象的容量操作函数 2.3.1 size()与length() 获取字符串的有效字符长度 在 std::string 类中size() 和 length() 都是用来获取字符串的长度的成员函数它们在功能上是等价的可以互换使用。 std::string str Hello, world!; int len str.size(); // 获取字符串长度std::string str Hello, world!; int len str.length(); // 获取字符串长度这两个函数都返回一个 size_t 类型的值表示字符串的字符数不包括 null 终止符 \0。它们的实际操作是相同的只是函数名不同你可以根据个人偏好选择使用哪个。 需要注意的是size_t 是无符号整数类型因此在使用 size() 或 length() 返回的值时要确保不会与负数进行比较或运算以避免不必要的问题。 2.3.2 capacity() 在 std::string 类中capacity() 是一个成员函数用于获取字符串对象内部分配的存储容量内存大小而不仅仅是字符串的长度。这个函数对于了解和优化内存分配非常有用。  当你创建一个 std::string 对象时它会分配一块内存来存储字符串数据。capacity() 函数返回的值是这块内存能够容纳的字符数量不包括 null 终止符 \0。 std::string str Hello; std::cout String length: str.length() std::endl; // 输出 5 std::cout String capacity: str.capacity() std::endl; // 输出至少 5在上面的例子中str 的长度是 5包括 Hello 的字符而 capacity() 函数可能会返回至少 5但实际上会分配更多的内存以便在需要时能够追加更多字符而不需要频繁重新分配内存。 2.3.3 empty() 判断是否为空串 在 std::string 类中empty() 是一个成员函数用于检查字符串是否为空即字符串中是否没有字符。  std::string str1 Hello; std::string str2;bool is_str1_empty str1.empty(); // 返回 false因为 str1 不为空 bool is_str2_empty str2.empty(); // 返回 true因为 str2 为空如上所示empty() 函数会返回一个布尔值表示字符串是否为空。如果字符串中没有字符即长度为 0则返回 true否则返回 false。 2.3.4 clear() 清空有效字符 在 std::string 类中clear() 是一个成员函数用于清空字符串中的内容使字符串变为空字符串。 std::string str Hello, world!; std::cout Before clear: str std::endl;str.clear(); // 清空字符串std::cout After clear: str std::endl; // 输出空字符串在上述示例中调用 str.clear() 后字符串 str 的内容将被清空变成了一个空字符串。注意clear() 函数会保留内存分配以便在后续操作中可能需要添加字符时不必重新分配内存。 2.3.5 reserve() 在 std::string 类中reserve() 是一个成员函数用于预分配字符串对象的内存空间以便存储未来可能的字符。这个函数在需要高效管理内存分配和避免频繁的重新分配时非常有用。  std::string str; std::cout Before reserve: Capacity str.capacity() std::endl;str.reserve(100); // 预分配至少能容纳 100 个字符的内存std::cout After reserve: Capacity str.capacity() std::endl;在上面的例子中我们首先创建了一个空字符串 str然后使用 reserve() 函数预分配了至少能容纳 100 个字符的内存。这样在后续添加字符时不会频繁地进行内存重新分配从而提高性能。 需要注意的是reserve() 函数并不会改变字符串的长度只是在内部分配足够的内存以便在需要时可以高效地添加字符。如果你知道字符串的大致长度使用 reserve() 可以帮助你减少内存重新分配的次数。 疑问 如果参数比我现在的有效字符数还要小呢如何处理 如果给 reserve() 函数的参数值太小它会根据情况进行内存分配以确保能够容纳至少指定数量的字符。如果指定的值比当前字符串长度要小那么 reserve() 将会忽略这个请求因为当前内存已经足够容纳现有的字符。 以下是一个示例演示了当给 reserve() 函数传递一个较小值时的行为 #include iostream #include stringint main() {std::string str Hello, world!;std::cout Before reserve: Capacity str.capacity() std::endl;str.reserve(5); // 预分配至少能容纳 5 个字符的内存std::cout After reserve: Capacity str.capacity() std::endl;return 0; }在这个示例中尽管我们传递了 reserve(5)字符串的当前长度已经是 13Hello, world!因此 reserve() 函数会保留当前的内存分配不会将内存缩减到只能容纳 5 个字符以保持已有的内容。 所以如果 reserve() 函数的参数值比当前字符串长度小函数会尽可能保留当前的内存分配以适应现有的字符串内容。这种行为确保了已有内容不会被截断或丢失。 2.3.6 resize() 在 std::string 类中resize() 是一个成员函数用于改变字符串的长度同时可以选择如何填充新增的部分。  #include iostream #include stringint main() {std::string str Hello;std::cout Before resize: str std::endl;str.resize(10, !); // 将字符串长度改变为 10多出部分用 ! 填充std::cout After resize: str std::endl;return 0; }在上面的例子中我们首先创建了一个字符串 str然后使用 resize() 函数将其长度改变为 10。如果指定的新长度大于当前长度那么多出的部分将使用指定的字符在这个例子中是 !进行填充。 如果指定的新长度小于当前长度字符串将被截断保留前面的字符而多余的字符将被删除。 需要注意的是resize() 函数可以接受两个参数新的长度和用于填充的字符。如果只提供新的长度函数会用 null 字符\0填充新增部分。 2.4 string类对象的访问及遍历操作 2.4.1 operator[] 在 std::string 类中operator[] 是一个用于访问字符串中特定位置字符的运算符重载。通过这个运算符你可以直接访问字符串中的单个字符就像访问数组元素一样。 #include iostream #include stringint main() {std::string str Hello, world!;char firstChar str[0]; // 获取第一个字符 Hchar sixthChar str[5]; // 获取第六个字符 ,std::cout First character: firstChar std::endl;std::cout Sixth character: sixthChar std::endl;return 0; }在上面的例子中我们通过 str[0] 和 str[5] 分别获取了字符串 str 的第一个和第六个字符。需要注意的是字符串的索引是从 0 开始的因此第一个字符的索引是 0。 如果使用 operator[] 访问超出字符串长度的索引将会导致未定义的行为因此在使用时需要确保索引的范围是有效的。 2.4.2 迭代器访问 ① 正向迭代器 在 std::string 类中你可以使用 begin() 函数获取一个指向字符串开头的迭代器使用 end() 函数获取一个指向字符串结尾的迭代器的下一个位置。这些迭代器可以用于遍历字符串中的字符。 #include iostream #include stringint main() {std::string str Hello, world!;// 使用迭代器遍历字符串for (std::string::iterator it str.begin(); it ! str.end(); it) {std::cout *it ;}std::cout std::endl;// 使用 const 迭代器遍历字符串不修改字符串内容for (std::string::const_iterator it str.begin(); it ! str.end(); it) {std::cout *it ;}return 0; }在上述示例中我们使用 begin() 和 end() 函数获取了迭代器然后使用迭代器遍历字符串中的字符。需要注意的是end() 函数返回的迭代器指向字符串的结尾的下一个位置因此在使用时应该注意边界。 如果你不需要修改字符串内容建议使用 const 版本的迭代器const_iterator以便在遍历过程中不意外地修改字符串内容。 ②反向迭代器 在 C11 及更高版本中std::string 提供了 rbegin() 和 rend() 成员函数它们分别返回一个反向迭代器用于从字符串末尾向开头遍历字符串的字符。这对于需要从末尾开始遍历字符串的场景非常有用。 #include iostream #include stringint main() {std::string str Hello, world!;// 使用反向迭代器遍历字符串for (std::string::reverse_iterator it str.rbegin(); it ! str.rend(); it) {std::cout *it ;}return 0; }在上述示例中我们使用 rbegin() 和 rend() 函数获取了反向迭代器然后使用迭代器遍历字符串中的字符。rbegin() 返回一个指向最后一个字符的迭代器rend() 返回一个指向第一个字符前面的位置的迭代器。 需要注意的是反向迭代器遍历的顺序是从字符串末尾向开头因此输出结果将会从右往左显示字符串的字符。 当使用 const 版本的迭代器遍历字符串时可以使用 crbegin() 和 crend() 成员函数。这些函数返回的是 const 版本的反向迭代器用于遍历字符串的字符同时不允许修改字符串内容。 #include iostream #include stringint main() {const std::string str Hello, world!;// 使用 const 反向迭代器遍历字符串for (std::string::const_reverse_iterator it str.crbegin(); it ! str.crend(); it) {std::cout *it ;}return 0; }总之crbegin() 和 crend() 是用于使用 const 反向迭代器遍历 std::string 字符的函数适用于不允许修改字符串内容的场景。 疑惑 为什么反向迭代器更新也是使用递增运算符呢 良好的设计和一致性是C标准库的重要支柱之一。在整个库中无论是正向迭代器还是反向迭代器它们都秉承着相似的操作方式这样使用者能够更加轻松地理解和使用。 在C中递增操作符 的含义异常清晰它让迭代器指向容器中的下一个元素。这一操作无论是用于正向迭代器还是反向迭代器都保持一致。通过维持这种一致性C标准库让不同类型的迭代器都能够使用相似的方式操作这极大地降低了学习和使用的难度。 举例来说当你使用反向迭代器遍历字符串时 操作将迭代器指向前一个字符这样一来正向迭代器和反向迭代器的操作行为就得以保持一致。这种一致性不仅增强了代码的可读性还有助于提升代码的维护性。 总之一致性和清晰的设计在C标准库中扮演着重要角色迭代器的 操作在不同类型的迭代器之间始终保持一致。这种一致性大大方便了使用者在容器中操作元素时的思维切换。 2.4.3 范围for循环 C11 引入了基于范围的 for 循环Range-based for loop可以方便地遍历容器包括字符串中的元素包括 std::string。 下面是如何使用范围 for 循环来遍历 std::string 中的字符的示例 #include iostream #include stringint main() {std::string str Hello, world!;// 使用范围 for 循环遍历字符串中的字符for (char c : str) {std::cout c ;}return 0; }在上述示例中我们使用范围 for 循环直接遍历了字符串 str 中的字符并将每个字符输出到控制台。范围 for 循环会自动迭代容器中的每个元素并将其赋值给指定的变量。 需要注意的是范围 for 循环中的变量类型应该与容器中的元素类型匹配。在遍历 std::string 时可以使用 char 类型来匹配字符串中的字符。 拓展 当使用范围 for 循环遍历 std::string 中的字符时你可以使用 auto 或者 const auto来更简洁地声明循环变量。这可以让代码更加清晰同时减少了类型匹配的烦恼。 与此同时必要时还可以加上。 #include iostream #include stringint main() {std::string str Hello, world!;// 使用 auto 遍历字符串中的字符for (auto c : str) {std::cout c ;}std::cout std::endl;// 使用 const auto 遍历字符串中的字符for (const auto c : str) {std::cout c ;}return 0; }在第一个范围 for 循环中我们使用 auto 来自动推断循环变量的类型这里会自动推断为 char。在第二个范围 for 循环中我们使用 const auto 它将循环变量声明为对字符的常量引用。 使用 const auto 可以减少拷贝特别是当处理容器内元素较大时效率会有所提高。而使用 auto 则会进行元素的拷贝。
http://www.w-s-a.com/news/452560/

相关文章:

  • wordpress 新闻杂志主题佛山企业网站排名优化
  • 选服务好的网站建设金华市开发区人才网
  • 广州建站商城南阳高质量建设大城市网站
  • 网站建设合同封面模板做代炼的网站
  • 外贸网站建站要多少钱南昌优化排名推广
  • 做公司网站的尺寸一般是多大企业管理网站
  • 苏州网站设计公司兴田德润i简介做签证宾馆订单用啥网站
  • 网站页面设计工具做网站租空间
  • 做智能网站系统百度提交入口
  • 网站建设代理商电话网站规划和建设方案
  • 双桥区网站制作seo 首页
  • 电子商务网站建设前期准备wordpress域名指向二级目录
  • 汕头建站网站模板淮北做网站电话
  • 手机做logo用什么网站服务器安全防护
  • 课程分销的网站怎么做北京企业网站建设方案
  • 吴兴区建设局网站湖北企业网站建设
  • 网页与网站的区别是什么2023年8月份新冠
  • 唐山网站建设外包公司安卓手机怎么搭建网页
  • 国内做网站最大的公司计量检测网站平台建设方案
  • 重庆沛宣网站建设网页制作初学者
  • php网站漂浮广告代码网络营销跟网站推广有啥区别
  • wordpress调用图片优化型网站建设的基本要求
  • 郑州模板网站建设策划公司做网站怎么赚钱滑县电
  • 东昌府聊城网站优化秦皇岛市妇幼保健院
  • 做网站能赚钱吗网页升级访问通知天天更新
  • 做网站使用什么软件的免费招聘网
  • 宁波网站建设公司推荐哪家淄博网站制作公司服务
  • 做网站网页挣钱不免费主题wordpress
  • 如何提高你的网站的粘性手机网站整站模板下载
  • 学校网站建设制度网站相关推荐怎么做