String 字符串操作容器是C++标准中实现的重要容器,其主要用于对字符串的高效处理,它和C风格中的string.h并不是同一个库,两个库有极大的差距,C库中的string.h主要面向过程提供一些处理函数,而C++库中的string则是基于类实现的更高效的一种字符串处理方法集,类中提供了非常方便的成员函数供我们使用.

1.1 字符串构造函数

如下一段C++代码,展示了如何使用STL字符串的不同构造函数对字符串进行赋值和初始化。

在代码中,首先定义了字符串变量str,并将其初始化为"hello lyshark"。然后,使用构造函数将字符串str中的内容全部复制到新的字符串变量str_1中。接着,使用构造函数从字符串str的第2个元素开始,复制5个元素,并赋值给新的字符串变量str_2

使用构造函数复制字符串str中的所有元素,并赋值给新的字符串变量str_3。接下来,将字符数组ch中的前3个元素赋值给新的字符串变量str_4。最后,使用构造函数将5个字符x组成的字符串xxxxx赋值给新的字符串变量str_5

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. int main(int argc, char* argv[])
  5. {
  6. string str("hello lyshark"); // 定义一个字符串
  7. string str_1(str); // 构造函数,将 str中的内容全部复制到str_1
  8. string str_2(str, 2, 5); // 构造函数,从字符串str的第2个元素开始,复制5个元素,赋值给str_2
  9. string str_3(str.begin(), str.end()); // 复制字符串 str 的所有元素,并赋值给 str_3
  10. char ch[] = "lyshark";
  11. string str_4(ch, 3); // 将字符串ch的前5个元素赋值给str_4
  12. string str_5(5, 'x'); // 将 5 个 'X' 组成的字符串 "XXXXX" 赋值给 str_5
  13. system("pause");
  14. return 0;
  15. }

1.2 字符串对象赋值

如下C++代码,展示了如何使用STL字符串中的assign()函数对字符串进行赋值和操作。

在代码中,首先定义了字符串变量strnew_str,并将其初始化为"lyshark"。然后,使用基本的对象赋值将字符串str的内容赋值给new_str,即new_str = str

接着,定义了三个新的字符串变量s1、s2s3,并使用assign()函数对其进行初始化。使用assign()函数的第一个形式,将字符串str从第1位开始向后截取4个字符,并赋值给字符串s1。使用assign()函数的第二个形式,将5个字符A填充到字符串s2中。使用assign()函数的第三个形式,未指定任何参数,因此字符串s3被初始化为空字符串。

最后,使用cout输出字符串s3的内容。由于字符串s3的内容为空,因此输出结果为空行。

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. int main(int argc, char* argv[])
  5. {
  6. string str,new_str;
  7. str = "lyshark"; // 基本的对象赋值
  8. new_str.assign(str); // 把str中的数据赋值给new_str
  9. string s1, s2, s3;
  10. s1.assign(str, 1, 4); // 字符串截取从str中第1位开始向后截取4个字符
  11. s2.assign(5, 'A'); // 想字符串中填充5个A
  12. cout << s3 << endl;
  13. system("pause");
  14. return 0;
  15. }

1.3 字符串遍历操作

如下C++代码,展示了如何使用STL字符串中的[]运算符和at()函数遍历字符串,并介绍了在遍历时如何避免越界访问字符串。

在代码中,首先定义了字符串变量str,并将其初始化为"hello lyshark"

使用[]运算符遍历字符串str中的所有字符,并输出每个字符。需要注意的是,使用[]运算符访问字符串时不能保证索引的有效性,如果访问越界,程序会直接崩溃。

使用at()函数遍历字符串str中的所有字符,并输出每个字符。使用at()函数访问字符串时,如果索引越界,则会抛出out_of_range异常。为了避免程序崩溃,使用try…catch语句来捕获异常并进行处理。

  1. #include <iostream>
  2. #include <string>
  3. #include <stdexcept>
  4. using namespace std;
  5. int main(int argc, char* argv[])
  6. {
  7. string str = "hello lyshark";
  8. // 第一种遍历如果字符串越界,会直接挂掉
  9. for (int x = 0; x < str.size(); x++)
  10. cout << str[x] << endl;
  11. // 第二种at遍历,如果越界会抛出异常
  12. try
  13. {
  14. for (int x = 0; x < str.size(); x++)
  15. cout << str[x] << endl;
  16. }
  17. catch (out_of_range &e)
  18. {
  19. cout << "异常类型: " << e.what() << endl;
  20. }
  21. system("pause");
  22. return 0;
  23. }

1.4 字符串添加与删除

如下C++代码,展示了如何使用STL字符串中的append()substr()erase()insert()等函数对字符串进行处理。

在代码中,首先定义了字符串变量str1str2,并将其初始化为hellolyshark,然后使用append()函数将字符串str2的内容追加到字符串str1的末尾,并输出追加后的结果。

使用append()函数将字符串str2的第1个字符到第3个字符之间的内容追加到字符串str1的末尾,并输出追加后的结果。

定义新的字符串变量str3,并将其初始化为"this is ok",然后使用substr()函数取子串,并将截取出来的子串赋值给变量str4和str5。

定义新的字符串变量str6,并将其初始化为"real steel",然后使用erase()函数从第5个字符开始向后删除所有字符,并输出删除后的结果。然后,使用erase()函数从第0个字符开始向后删除4个字符,并输出删除后的结果。

定义新的字符串变量str7,并将其初始化为"hello lyshark",然后使用insert()函数在下标2处插入字符串"123",并使用insert()函数在下标3处插入4个字符A,并输出插入后的结果。

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. int main(int argc, char* argv[])
  5. {
  6. string str1("hello "), str2("lyshark");
  7. str1.append(str2); // 将str2的内容追加到str1后面
  8. str1.append(str2, 1, 3); // 将str2内容从第1个到第3个字符追加到str1后面
  9. str1.append(5, 'A'); // 向str1子串里面追加5个A
  10. string str3 = "this is ok";
  11. string str4 = str3.substr(1,3); // 截取子串 => his
  12. string str5 = str3.substr(1, 5); // 截取子串 => his i
  13. string str6 = "real steel";
  14. str6.erase(5); // 从第5个字符开始向后删除所有
  15. str6.erase(0, 4); // 从第0个字符开始向后删除4个
  16. string str7 = "hello lyshark";
  17. str7.insert(2, "123"); // 在下标 2 处插入字符串"123"
  18. str7.insert(3, 4, 'A'); // 在下标 3 处插入 5 个 'A'
  19. system("pause");
  20. return 0;
  21. }

1.5 字符串查找与替换

如下C++代码,展示了如何使用STL字符串中的find()substr()find_first_of()compare()replace()等函数对字符串进行处理。

使用find()函数在字符串str1中查找字符u第一次出现的位置,并将其赋值给变量x,如果查找到了,则使用substr()函数输出从字符u位置到字符串结尾处的子串。

使用find()函数在字符串str1中查找字符串"Source",并从下标3的位置开始查找,在找到的位置处使用substr()函数输出从该位置开始到字符串结尾处的子串。

使用find_first_of()函数在字符串str1中查找字符串"urc"中的第一个出现的字符,并将其位置输出。

使用compare()函数比较两个字符串变量str1str2是否相等,如果不相等,则输出False。

最后,定义了一个新的字符串变量str3,并将其初始化为"hello lyshark",然后使用replace()函数从第1个位置开始替换3个字符并将其替换成"abcde"

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. int main(int argc, char* argv[])
  5. {
  6. string str1("Source Code"),str2("Source Code");
  7. int x;
  8. if ((x = str1.find("u")) != string::npos)
  9. cout << str1.substr(x) << endl; // 查找字符u第一次出现的位置
  10. if ((x = str1.find("Source", 3)) != string::npos)
  11. cout << str1.substr(x) << endl; // 查找Source字符串,并从下标3位置输出
  12. if ((x = str1.find_first_of("urc")) != string::npos)
  13. cout << x << endl; // 查找urc字符串最先出现的位置
  14. if (str1.compare(str2)) // 比较两个字符串是否相等
  15. cout << "False" << endl;
  16. string str3 = "hello lyshark";
  17. str3.replace(1, 3, "abcde"); // 从第1处开始替换3个字符
  18. cout << str3 << endl;
  19. system("pause");
  20. return 0;
  21. }

1.6 字符串首尾数据提取

如下C++代码,展示了如何使用STL字符串string类型中的substr()函数和find()函数将字符串分解为多个子串,并输出提取后的结果。

使用find()函数查找字符@在字符串email中的位置,并将其赋值给变量pos

使用substr()函数提取从字符串email的第0个字符开始到pos位置之前的子串,并将其赋值给变量username,并输出该变量的值。

使用substr()函数提取从字符串emailpos+1位置开始到结束的子串,并将其赋值给变量mail,并输出该变量的值。

读者需要注意,在使用substr()函数提取子串时,第一个参数表示子串的起始位置,第二个参数表示子串的长度。如果第二个参数不写,则默认提取从起始位置开始到字符串结尾处的字符。

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. int main(int argc, char* argv[])
  5. {
  6. string email = "admin@lyshark.cn";
  7. int pos = email.find("@");
  8. string username = email.substr(0, pos); // 提取出用户名
  9. cout << username << endl;
  10. string mail = email.substr(pos+1); // 提取出mail邮箱
  11. cout << mail << endl;
  12. system("pause");
  13. return 0;
  14. }

1.7 字符串与字符互转

如下C++代码,展示了如何使用STL字符串string类型和标准库函数实现了不同类型之间的相互转换,包括string转换为char类型,char转换为string类型,以及int转换为string类型。

使用c_str()函数将string类型的变量转换为const char*类型,并将其存储到指针变量ptr中,用于输出其值。

使用指针变量ptr创建一个新的string类型的变量str1,并将转换后的字符串赋值给它,用于输出其值。

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. int main(int argc, char* argv[])
  5. {
  6. string str = "lyshark";
  7. // string 转换为 -> char *
  8. const char *ptr = str.c_str();
  9. cout << ptr << endl;
  10. // char * 转换为 -> string
  11. string str1(ptr);
  12. cout << str1 << endl;
  13. // int 转换为 -> string
  14. int Num = 546;
  15. string str2 = to_string(Num);
  16. cout << str2 << endl;
  17. system("pause");
  18. return 0;
  19. }

1.8 字符串大小写互转

如下C++代码,展示了如何使用标准库函数toupper()将字符串中的字母全部转换为大写形式,并输出转换后的结果。

使用toupper()函数将每个字符转换成大写形式,并将转换后的字符再存储回原始的字符串变量str中。

最后,输出字符串中所有的字母字符均已转换成大写形式的结果。

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. int main(int argc, char* argv[])
  5. {
  6. string str = "lyshark";
  7. for (int x = 0; x < str.size(); x++)
  8. str[x] = toupper(str[x]); // 全部变大写
  9. //str[x] = tolower(str[x]); // 全部变小写
  10. cout << str << endl;
  11. system("pause");
  12. return 0;
  13. }

1.1 C++ STL 字符串构造函数的更多相关文章

  1. STL字符串常用方法扩展

    前言 STL作为一个标准模版库,很多容器和算法都是很实用的,接口也相对比较友好,而且在实现上也比较轻量级.相对boost来说,要轻量得多,相对loki来说,使用的模版语法不会那么晦涩难懂,基本还是能看 ...

  2. 几个字符串的误区,以及setlocale函数的使用

    转自 http://www.blogjava.net/baicker/archive/2007/08/09/135642.html 转自 http://witmax.cn/character-enco ...

  3. C++标准模板库Stand Template Library(STL)简介与STL string类

    参考<21天学通C++>第15和16章节,在对宏和模板学习之后,开启对C++实现的标准模板类STL进行简介,同时介绍简单的string类.虽然前面对于vector.deque.list等进 ...

  4. 【转】C# 将字符串或表达式直接转为可执行代码的办法

    C# 将字符串或表达式直接转为可执行代码的办法 反射类 using System; using System.Data; using System.Configuration; using Syste ...

  5. c#字符串操作方法实例

    # 字符串是使用 string 关键字声明的一个字符数组.字符串是使用引号声明的,如下例所示: string s = "Hello, World!"; 字符串对象是“不可变的”,即 ...

  6. C#动态执行字符串(动态创建代码)

    在编写C#程序的时候,有时我们需要动态生成一些代码并执行.然而C#不像JavaScript有一个Eval函数,可以动态的执行代码.所有这些功能都要我们自己去完成.如下是实例. 动态创建代码: usin ...

  7. C#字符串的常用操作

    一.string关键字与StringBuilder类 C# 字符串是使用 string 关键字声明的一个字符数组.字符串是使用引号声明的,如下例所示: string s = "Hello, ...

  8. C++著名程序库的比较和学习经验(STL.Boost.GUI.XML.网络等等)

    1.C++各大有名库的介绍--C++标准库 2.C++各大有名库的介绍--准标准库Boost 3.C++各大有名库的介绍--GUI 4.C++各大有名库的介绍--网络通信 5.C++各大有名库的介绍- ...

  9. STL数组和com数组相互转换的做法

    作者:朱金灿 来源:http://blog.csdn.net/clever101 STL的泛型数组是vetor,com的泛型数组类型是VARIANT.二者怎样能相互转化呢?就是说怎么把一个vector ...

  10. 字符串和字符编码unicode

    python基础第三天 字符串 str 作用: 用来记录文本(文字)信息,给人类识别用的,为人们提供注释解释说明 表示方式: 在非注释中,凡是用引号括起来的部分都是字符串 ' 单引号 " 双 ...

随机推荐

  1. 【django-vue】七牛云上传视频 搜索接口 支付宝sdk二次封装 下单接口 前端支付页面 支付成功回调接口

    目录 上节回顾 课程详情接口 choice字段 今日内容 1 文件存储 1.1 七牛云上传文件 2 搜索导航栏 2.1 Header.vue 3 搜索接口 4 搜索页面 5 支付宝支付介绍 5.1 支 ...

  2. Mysql--表注释,字段注释

    information_schema数据库是MySQL数据库自带的数据库,里面存放的MySQL数据库所有的信息,包括数据表.数据注释.数据表的索引.数据库的权限等等. 1.添加表.字段注释 creat ...

  3. docker centos 容器时间与宿主机时间不一致

    上图 容器时间不一致会造成N多问题,估计各位看官儿应该深有体会. 我处理的方式是在,dockerfile 中进行增加一条命令进行设置: RUN cp /usr/share/zoneinfo/Asia/ ...

  4. PVE API创建虚拟机

    度娘,谷歌都搜了一圈没有找到通过PVE API创建虚拟机的方式, 于是查官网自己试了试,部分代码抄的Sam Liu大佬的作业,感谢大佬. python代码如下: import requests # s ...

  5. 消息服务 + Serverless 函数计算如何助力企业降本提效?

    作者 | 柳下 背景介绍 消息队列服务(下文均以 Message Service 命名)作为云计算 PaaS 领域的基础设施之一,其高并发.削峰填谷的特性愈发受到开发者关注.Message Servi ...

  6. 【调试】kprobes(一)基本概念

    简介 开发人员在内核或者模块的调试过程中,往往会需要要知道其中的一些函数有无被调用.何时被调用.执行是否正确以及函数的入参和返回值是什么等等. 比较简单的做法是在内核代码对应的函数中添加日志打印信息, ...

  7. MySQL 覆盖索引详解

    本文转载自:MySQL 覆盖索引详解,作者 Sevn 1. 什么是索引? 索引(在 MySQL 中也叫"键key")是存储引擎快速找到记录的一种数据结构,通俗来说类似书本的目录. ...

  8. 基于Java 的商城网站系统设计与实现(8000字论文)

    摘要 随着我国经济活力的不断提升和互联网的快速发展,信息的重要性正在显现出来.电子商务作为经济发展的重要一环取得了突飞猛进的发展.由于具有高效便捷的优点,网上购物已经成为一种不可或缺的新型生活方式,近 ...

  9. bootstrap : 解决使图片全屏显示有空白边距的问题

    <!DOCTYPE html> <html lang="en"> <head>     <meta charset="utf-8 ...

  10. 初次安装Linux 1Panel面板体验

    初次安装Linux 1Panel面板体验 1Panel是Linux下的一款服务器管理工具.和宝塔相比更加轻量化.相比之下各有优点,本文让我们一起来安装1Panel面板. 面板优势 快速建站 :深度集成 ...