string类常见用法

2023-10-27

需要包含头文件和命名空间

#include<string>

using namespace std;

目录

1. 声明

2.string与C字符数组的比较

2.1、C风格字符串

2.1、C字符数组及其与string串的区别

2.3、string对象的操作

 

3.字符串操作函数

string类函数

4.int型与string型的互相转换


0.困惑点

关于在C++中 #include<string.h>   和  #include<cstring>   和  #include<string> 的区别?

结论:如果想要定义string,那么必须写上 using namespace std 和 #include <string>

如果想要使用strcat等函数就加上<cstring>或者<string.h>

详细解释可看:https://blog.csdn.net/weixin_42513339/article/details/89208031

strcat函数用法可看:https://blog.csdn.net/u013162035/article/details/78612407

PS:对于<string>和另外两个没有关系,不要混淆。

 

 

1. 声明

 string str; 

string类的构造函数和析构函数如下:

1)  string s;  // 生成一个空字符串s 
2)  string s(str) ; // 拷贝构造函数生成str的复制品 
3)  string s(str, stridx);  // 将字符串str内"始于位置stridx"的部分当作字符串的初值 
4)  string s(str, stridx, strlen) ; // 将字符串str内"始于stridx且长度顶多strlen"的部分作为字符串的初值 
5)  string s(cstr) ;  // 将C字符串(以NULL结束)作为s的初值 
6)  string s(chars, chars_len) ;  // 将C字符串前chars_len个字符作为字符串s的初值。 
7)  string s(num, ‘c’) ;  // 生成一个字符串,包含num个c字符 
8)  string s(“value”);  string s=“value”;  // 将s初始化为一个字符串字面值副本
9)  string s(begin, end);  // 以区间begin/end(不包含end)内的字符作为字符串s的初值 
10) s.~string();  //销毁所有字符,释放内存 

 

2.string与C字符数组的比较

string串要取得其中某一个字符,和传统的C字符串一样,可以用s[i]的方式取得。比较不一样的是如果s有三个字符,传统C的字符串的s[3]是’\0’字符,但是C++的string则是只到s[2]这个字符而已。

2.1、C风格字符串

  • 用”“括起来的字符串常量,C++中的字符串常量由编译器在末尾添加一个空字符;
  • 末尾添加了‘\0’的字符数组,C风格字符串的末尾必须有一个’\0’。

2.1、C字符数组及其与string串的区别

char ch[ ]={‘C’, ‘+’, ‘+’}; //末尾无NULL
char ch[ ]={‘C’, ‘+’, ‘+’, ‘\0’}; //末尾显式添加NULL
char ch[ ]=”C++”; //末尾自动添加NULL字符 若[ ]内数字大于实际字符数,将实际字符存入数组,其余位置全部为’\0’。 

è¿éåå¾çæè¿°

2.3、string对象的操作

string s;
1)  s.empty();  // s为空串 返回true
2)  s.size();  // 返回s中字符个数 类型应为:string::size_type
3)  s[n];  // 从0开始相当于下标访问
4)  s1+s2;  // 把s1和s2连接成新串 返回新串 
5)  s1=s2;  // 把s1替换为s2的副本
6)  v1==v2;  // 比较,相等返回true
7)  `!=, <, <=, >, >=`  惯有操作 任何一个大写字母都小于任意的小写字母

当进行string对象和字符串字面值混合连接操作时,+操作符的左右操作数必须至少有一个是string类型的:

string s1(“hello”);
string s3=s1+”world”;  //合法操作
string s4=”hello”+”world”;  //非法操作:两个字符串字面值相加

 

3.字符串操作函数

常见如:

字符串长度  (length)

string str = "478";

int len = str.length(); //len为3 

删除某个元素:

string str = "478";

str.erase(0,1);//第0号开始,删除1个元素

 

string类函数

  1. =, s.assign() // 赋以新值 
  2. swap() // 交换两个字符串的内容 
  3. +=, s.append(),s.push_back() // 在尾部添加字符 
  4. s.insert() // 插入字符 
  5. s.erase() // 删除字符 
  6. s.clear() // 删除全部字符 
  7. s.replace() // 替换字符 
  8. + // 串联字符串 
  9. ==,!=,<,<=,>,>=,compare() // 比较字符串 
  10.  size(),length() // 返回字符数量 
  11.  max_size() // 返回字符的可能最大个数 
  12.  s.empty() // 判断字符串是否为空 
  13.  s.capacity() // 返回重新分配之前的字符容量 
  14.  reserve() // 保留一定量内存以容纳一定数量的字符 
  15.  [ ], at() // 存取单一字符 
  16.  >>,getline() // 从stream读取某值 
  17.  << // 将谋值写入stream 
  18.  copy() // 将某值赋值为一个C_string 
  19.  c_str() // 返回一个指向正规C字符串(C_string)的指针 内容与本string串相同 有’\0’ 
  20.  data() // 将内容以字符数组形式返回 无’\0’ 
  21.  s.substr() // 返回某个子字符串 
  22.  begin() end() // 提供类似STL的迭代器支持 
  23.  rbegin() rend() // 逆向迭代器 
  24.  get_allocator() // 返回配置器

 

4.int型与string型的互相转换

4.1 int型转string型

 1.使用 to_string()函数

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string s;
	int a=30;
	s=to_string(a);   //这种会报错vs2010没有int型参数,必须强制转换long long
	s=to_string(long long(a));
        cout<<s<<endl;
    return 0;
}//输出:30

2.使用stringstream

#include<iostream>
#include<string>
#include<sstream>    //字符串流头文件
using namespace std;
int main(void)
{
    string s;
    stringstream ss;
    int a=30;
    ss<<a;
    ss>>s;
    cout<<s<<endl;
    cout<< ss.str() << endl; //或者利用字符串流的str函数获取流中的内容
    return 0;
}

在C++中更推荐使用流对象来实现类型转换,以上两个函数在使用时需要包含头文件 #include <sstream>

 

4.2 string型转int型

1.使用stringstream

#include<iostream>
#include<string>
#include<sstream>
using namespace std;
int main()
{
	string s="35";
	stringstream ss;
	int a;
	ss<<s;
	ss>>a;
	cout<<a<<endl;
    return 0;
}

2.stoi()函数(stoi/stol/stoll等等函数)

int stoi (const string&  str, size_t* idx = 0, int base = 10); //第一个为str输入,第二个默认0下标开始,第三个默认10进制
int stoi (const wstring& str, size_t* idx = 0, int base = 10);

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string s="35";
    int i = stoi(s);
    cout<<i;
    return 0;
}
//输出:35

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

string类常见用法 的相关文章

  • boost::asio + std::future - 关闭套接字后访问冲突

    我正在编写一个简单的 TCP 客户端来发送和接收单行文本 异步操作由 std future 处理 以便于超时阻塞查询 不幸的是 我的测试应用程序在破坏服务器对象时因访问冲突而崩溃 这是我的代码 TCP客户端 hpp ifndef TCPCL
  • 如何在 C++ 中的文件末尾添加数据?

    我已按照网上的说明进行操作 此代码应该将输入添加到文件 数据库 的末尾 但当我检查时 数据会覆盖现有数据 请帮忙 这是我的代码 int main string name string address string handphone cou
  • C++ 中本地类中的静态成员变量?

    我知道我们不能宣布static本地类中的成员变量 但其原因尚不清楚 那么请问有人可以解释一下吗 另外 为什么我们不能访问非static函数内部定义的变量 内部已经定义了局部类 直接在局部类成员函数中 在下面给出的代码中 int main i
  • 如何在 C# 中从 UNIX 纪元时间转换并考虑夏令时?

    我有一个从 unix 纪元时间转换为 NET DateTime 值的函数 public static DateTime FromUnixEpochTime double unixTime DateTime d new DateTime 19
  • 读取文件特定行号的有效方法。 (奖励:Python 手册印刷错误)

    我有一个 100 GB 的文本文件 它是来自数据库的 BCP 转储 当我尝试导入它时BULK INSERT 我在第 219506324 行上收到一个神秘错误 在解决此问题之前 我想看看这一行 但可惜的是我最喜欢的方法 import line
  • 将 System.Windows.Input.KeyEventArgs 键转换为 char

    我需要将事件参数作为char 但是当我尝试转换 Key 枚举时 我得到的字母和符号与传入的字母和符号完全不同 如何正确地将密钥转换为字符 这是我尝试过的 ObserveKeyStroke this new ObervableKeyStrok
  • 关于在 Windows 上使用 WiFi Direct Api?

    我目前正在开发一个应用程序 我需要在其中创建链接 阅读 无线网络连接 在桌面应用程序 在 Windows 10 上 和平板电脑 Android 但无关紧要 之间 工作流程 按钮 gt 如果需要提升权限 gt 创建类似托管网络的 WiFi 网
  • 将 Excel 导入到 Datagridview

    我使用此代码打开 Excel 文件并将其保存在 DataGridView 中 string name Items string constr Provider Microsoft Jet OLEDB 4 0 Data Source Dial
  • 使用 JNI 从 Java 代码中检索 String 值的内存泄漏

    我使用 GetStringUTFChars 从使用 JNI 的 java 代码中检索字符串的值 并使用 ReleaseStringUTFChars 释放该字符串 当代码在 JRE 1 4 上运行时 不会出现内存泄漏 但如果相同的代码在 JR
  • 如何将整数转换为 void 指针?

    在 C 中使用线程时 我面临警告 警告 从不同大小的整数转换为指针 代码如下 include
  • 如何将自定义 JSON 文件添加到 IConfiguration 中?

    我正在使用 asp net Autofac 我正在尝试加载自定义 JSON 配置文件 并基于该文件创建 实例化 IConfiguration 实例 或者至少将我的文件包含到默认情况下构建的 IConfiguration asp net 中
  • 使用 Moq 使用内部构造函数模拟类型

    我正在尝试模拟 Microsoft Sync Framework 中的一个类 它只有一个内部构造函数 当我尝试以下操作时 var fullEnumerationContextMock new Mock
  • 等待线程完成

    private void button1 Click object sender EventArgs e for int i 0 i lt 15 i Thread nova new Thread Method nova Start list
  • .NET中的LinkedList是循环链表吗?

    我需要一个循环链表 所以我想知道是否LinkedList是循环链表吗 每当您想要移动列表中的 下一个 块时 以循环方式使用它的快速解决方案 current current Next current List First 电流在哪里Linke
  • gcc 的配置选项如何确定默认枚举大小(短或非短)?

    我尝试了一些 gcc 编译器来查看默认枚举大小是否很短 至少一个字节 强制使用 fshort enums 或无短 至少 4 个字节 强制使用 fno short enums user host echo Static assert 4 si
  • 用于 C# 的 TripleDES IV?

    所以当我说这样的话 TripleDES tripledes TripleDES Create Rfc2898DeriveBytes pdb new Rfc2898DeriveBytes password plain tripledes Ke
  • 如何在 C# 中调整图像大小同时保持高质量?

    我从这里找到了一篇关于图像处理的文章 http www switchonthecode com tutorials csharp tutorial image editing saving cropping and resizing htt
  • 如何在按钮单击时模拟按键 - Unity

    我对 Unity 中的脚本编写非常陌生 我正在尝试创建一个按钮 一旦单击它就需要模拟按下 F 键 要拾取一个项目 这是我当前的代码 在编写此代码之前我浏览了所有统一论坛 但找不到任何有效的东西 Code using System Colle
  • 如何使用 Word Automation 获取页面范围

    如何使用办公自动化找到 Microsoft Word 中第 n 页的范围 似乎没有 getPageRange n 函数 并且不清楚它们是如何划分的 这就是您从 VBA 执行此操作的方法 转换为 Matlab COM 调用应该相当简单 Pub
  • 在客户端系统中安装后桌面应用程序无法打开

    我目前正在使用 Visual Studio 2017 和 4 6 1 net 框架 我为桌面应用程序创建了安装文件 安装程序在我的系统中完美安装并运行 问题是安装程序在其他计算机上成功安装 但应用程序无法打开 edit 在客户端系统中下载了

随机推荐

  • Flink CDC 详述实时数据湖

    在构建实时数仓的过程中 如何快速 正确的同步业务数据是最先面临的问题 本文主要讨论一下如何使用实时处理引擎Flink和数据湖Apache Iceberg两种技术 来解决业务数据实时入湖相关的问题 01 Flink CDC介绍 CDC全称是C
  • Mac 开发 Tang Nano FPGA 指南(使用终端和使用 VS Code 和插件,适用所有 Gowin FPGA)

    最近收到了一个 Tang nano 9K FPGA开发板 就想借此机会研究一下 官方文档里介绍如果想使用高云的 FPGA 就需要使用 GOWIN IDE 但是需要申请 license 提交一堆资料 我是别人送的就不太方便让别人弄 加上 ID
  • 一,凸包---3,极边

    极边就是组成凸包的边的集合 时间复杂度是o n3 比判断极点快 时间复杂度O n4 快 为什么呢 试想 不论极边也好 极点也好 判断的依据是三角形的方向 无论是海伦公式 还是向量叉乘 极边是需要三个点组成一个三角形 是一个三重循环 即可用t
  • 六.安装harbor

    1 下载 harbor offline installer v1 9 3 链接 https pan baidu com s 1dTCy2KPqRhYKxTyE7vlrPg 提取码 6666 需要安装docker compose 2 修改配置
  • Java基础之异常

    文章目录 前言 一 初识异常 二 异常的体系结构 三 异常的分类 四 异常的处理 1 throw 异常抛出 2 throws 异常声明 3 try catch 捕获处理 4 finally 5 try catch finally与retur
  • Hugo themes Doit 合并 tags , categories 为检索页

    Hugo themes Doit 合并 tags categories 为检索页 原文 总觉得 tags categories 等页面可以合并成为一页 这样检索起来更方便一些 成果 https www ftls xyz retrieval
  • 编译程序和解释程序有什么区别?

    1 编译程序和解释程序的区别 编译型是使用编译器编译后生成计算机硬件可直接执行的指令 解释型是在运行时才由解释器逐语句去执行 编译型代表 C C C Java 解释型代表 html javascript 区别有很多 说说常见的几个 编译型语
  • MATLAB bp神经网络预测代码

    清除变量 清楚变量 claer clc 导入数据 变量个数较少可以自己输入变量 变量数目较大时建议采用读取Excel并保存成 mat的方法来导入数据 读取 m数据 以data mat为例 load data mat load data1 m
  • React路由

    安装 npm i react router dom S 导入 import BrowserRouter as Router Route Link from react router dom HashRouter与BrowserRouter
  • iOS基础教程-SQLite数据库操作(二简单实例学生信息增删改查数据库操作)

    学生名单管理界面实现数据库的增删改操作 关于UI部分 我们使用storyboard简单完成 在上一篇文章中有详细的描述iOS基础教程 SQLite数据库操作 一 StoryBoard操作 SQLite操作前准备工作 本篇结束以后 就可以完成
  • webpack设置分包

    Webpack中设置分包 code splitting 是一种优化技术 它允许将你的代码分割成多个小块 以便在不同的页面或情境中按需加载 这可以显著减小初始加载的资源大小 提高网页性能 Webpack提供了几种方式来设置分包 其中最常见的是
  • 搞懂 API ,地图 API 制作方法分享

    地图 API 是一种基于 Web 开发的应用程序编程接口 可以用于创建和展示地图及地理信息 以下是一些地图 API 制作的方法 选择地图 API 平台 目前市场上有很多地图 API 平台供选择 比如 Google Maps API 百度地图
  • WorkTool企微机器人自动接收图片回传(方案三)

    自动接收图片并上传到服务器 仅适用企业微信应用 前言 WorkTool企微机器人可以接收客户群的消息 但接收图片一直是个问题 前面也介绍过两种图片接收方案 但都会影响运行效率 并且不能达到100 的图片接收率 实测95 本方案三是通过企微官
  • 2023年测试之路,从功能测试进阶测试开发工程师,突破内卷...

    目录 导读 前言 一 Python编程入门到精通 二 接口自动化项目实战 三 Web自动化项目实战 四 App自动化项目实战 五 一线大厂简历 六 测试开发DevOps体系 七 常用自动化测试工具 八 JMeter性能测试 九 总结 尾部小
  • QT5.9.6和VS2015的配置使用

    要做界面但是MFC实在是 所以果断尝试QT实现界面化 QT5 9 6 VS2015 opencv2 4 13 所用软件 QT5 9 6 VS2015 参考地址 Qt5 7 VS2015 环境搭建https blog csdn net lia
  • kafka常用命令汇总

    新建topic bin kafka topics sh zookeeper localhost 2181 create replication factor 1 partitions 1 topic test service 删除topic
  • Qt发送端用自定义结构体发送,接收端QByteArray接收

    Qt TCP UDP 一端用自定义结构体发送消息 一端用QByteArray接收消息 用自定义结构体发送消息 void TcpServer timeOut QDateTime nowTime QDateTime currentDateTim
  • select top语句 mysql_SQL SELECT TOP 语句

    SELECT TOP 子句用于规定要返回的记录的数目 SELECT TOP 子句对于拥有数千条记录的大型表来说 是非常有用的 注释 并非所有的数据库系统都支持 SELECT TOP 子句 SQL Server MS Access 语法 SE
  • SSE3和SSSE3 Intrinsics各函数介绍

    SIMD相关头文件包括 include
  • string类常见用法

    需要包含头文件和命名空间 include