C++——string类的使用

devtools/2024/11/9 17:08:47/

1、string的构造

        在  c plus plus  这个网站上可以查到相关的信息,

(1)是无参构造函数(也是默认构造),就是一个空字符串

(2)是一个拷贝构造,传入一个参数构造字符串

 (3)是一个有参构造,参数有点复杂,他有一个字符串,在字符串的pos位置,取len个字符,这个len有缺省值,len=npos,npos是一个无符号整型的-1,表示此类型的最大值,也就是无符号整形中最大的值,

假设我们不给len传参,就是从pos位置,取到字符串的末尾,然后赋值给s3;

我们给len赋值,就是从pos位置取len个字符,然后赋值给s3;

 (4)是用一个C-string来构建,C-string指的就是结尾带/0的字符串,

(5)是取字符串前n个字符

 (6)是构造n个’c'字符,组成字符串

标红的用的比较多,要重点记

2、string类对象的容量操作

1.size  

 返回字符串有效字符长度;

返回的字符的个数,但是不包括  ‘\0’, 其实string类的结尾是有\0的,因为要兼容C语言,

 2.length

返回字符串有效字符长度,作用和size差不多,但我们经常用size;

3.resize

调整字符串大小

将字符串大小调整为 n 个字符的长度。

如果 n 小于当前字符串长度,则当前值将缩短为其第一个 n 个字符,从而删除第 n个字符之外的字符。

如果 n 大于当前字符串长度,则通过在末尾插入所需数量的字符来扩展当前内容,以达到 n 的大小。如果指定了 c,则新元素将初始化为 c 的副本,否则,它们是值初始化的字符(空字符)。

注意:

当我们要插入字符时,从字符串末尾的位置插入,也就是\0的位置最后一行打印的,末尾其实还有5个\0,我们看不出来,

4.capacity

返回空间总大小

因为字符串可以自动扩容,所以他有个容量接口,但是不同编译器下,扩容的规则不一样,有的是二倍扩容,有的是1.5倍扩容,

5.max_size

字符串的最大长度

max_size是指在当前环境下,可以达到字符串的最大长度;

6.reserve

为字符串预留空间

string s1.reserve(100);

就是为字符串一次性开辟100个字节的空间,比较方便;

7.clear

清空有效字符

清除一个string类的有效字符,但是空间还在,

8.empty

判断字符串是否为空

9.reverse

反转字符串

这个好像涉及到迭代器,比如我们要反转一个字符串

reverse( s1.begin(),s1.end() )

这样写就可以了

3、operator[]以及string类的遍历

string类还重载了[]类型,可以去到字符的下标,和数组类似,

// 1. for+operator[]for (size_t i = 0; i < s.size(); ++i)cout << s[i] << endl;// 2.迭代器string::iterator it = s.begin();while (it != s.end()){cout << *it << endl;++it;}// string::reverse_iterator rit = s.rbegin();// C++11之后,直接使用auto定义迭代器,让编译器推到迭代器的类型auto rit = s.rbegin();while (rit != s.rend())cout << *rit << endl;// 3.范围forfor (auto ch : s)cout << ch << endl;
}

4、string类对象的修改操作

1.operator+=

字符串可以+=一个字符串或者字符或string类

非常好用

2.append

追加字符串

不过平时用的少,我们可以通过一些例子来说明:
 

void test_string3()
{std::string str;std::string str2 = "Writing ";std::string str3 = "print 10 and then 5 more";// used in the same order as described above:str.append(str2);                       // "Writing "str.append(str3, 6, 3);                   // "10 "str.append("dots are cool", 5);          // "dots "str.append("here: ");                   // "here: "str.append(10u, '.');                    // "..........",10u表示10是一个无符号整形str.append(str3.begin() + 8, str3.end());  // " and then 5 more"std::cout << str << '\n';
}

3.push_back

尾插一个字符,空间不够自动扩容

4.assign

替换当前字符串的值

和append格式一样,但是作用不一样;

// string::assign
#include <iostream>
#include <string>int main ()
{std::string str;std::string base="The quick brown fox jumps over a lazy dog.";// used in the same order as described above:str.assign(base);std::cout << str << '\n';str.assign(base,10,9);std::cout << str << '\n';         // "brown fox"str.assign("pangrams are cool",7);std::cout << str << '\n';         // "pangram"str.assign("c-string");std::cout << str << '\n';         // "c-string"str.assign(10,'*');std::cout << str << '\n';         // "**********"str.assign<int>(10,0x2D);std::cout << str << '\n';         // "----------"str.assign(base.begin()+16,base.end()-12);std::cout << str << '\n';         // "fox jumps over"return 0;
}

5.insert

在字符串中插入其他字符串

样例: 

// inserting into a string
#include <iostream>
#include <string>int main ()
{std::string str="to be question";std::string str2="the ";std::string str3="or not to be";std::string::iterator it;// used in the same order as described above:str.insert(6,str2);                 // to be (the )questionstr.insert(6,str3,3,4);             // to be (not )the questionstr.insert(10,"that is cool",8);    // to be not (that is )the questionstr.insert(10,"to be ");            // to be not (to be )that is the questionstr.insert(15,1,':');               // to be not to be(:) that is the questionit = str.insert(str.begin()+5,','); // to be(,) not to be: that is the questionstr.insert (str.end(),3,'.');       // to be, not to be: that is the question(...)str.insert (it+2,str3.begin(),str3.begin()+3); // (or )std::cout << str << '\n';return 0;
}

6.erase

销毁当前字符串

7.replace

替换 字符串的一部分 

和assign的区别是,assign把整个字符串都替换了,replace可以替换部分字符串

5、string类对象的字符串操作

1.c_str

把string类转化成字符串类型;

2.copy

从字符串中赋值一段字符串,赋值给指定的字符数组

 

// string::copy
#include <iostream>
#include <string>int main ()
{char buffer[20];std::string str ("Test string...");std::size_t length = str.copy(buffer,6,5);buffer[length]='\0';std::cout << "buffer contains: " << buffer << '\n';return 0;
}

 3.find

在字符串里查找字符或者字符串或者string类

(3)的意思是在字符串中查找s,在pos位置,查找s的n个字符;

4.rfind

倒着查找,其他的和find一样

5.substr

在字符串中从pos位置开始,截取n个字节,然后返回

// string::substr
#include <iostream>
#include <string>int main ()
{std::string str="We think in generalities, but we live in details.";// (quoting Alfred N. Whitehead)std::string str2 = str.substr (3,5);     // "think"std::size_t pos = str.find("live");      // position of "live" in strstd::string str3 = str.substr (pos);     // get from "live" to the endstd::cout << str2 << ' ' << str3 << '\n';return 0;
}

 6.getline

流输入一行字符串

通常我们用的cin输入,遇到空格或者换行就会停止,用getline可以很好的解决这个问题,

#include <iostream>
#include <string>int main ()
{std::string name;std::cout << "Please, enter your full name: ";std::getline (std::cin,name);std::cout << "Hello, " << name << "!\n";return 0;
}

 

自己熟悉一下,不如看文档!


http://www.ppmy.cn/devtools/23171.html

相关文章

ES练习项目-酒店搜索

目录 1 需求分析2 酒店搜索和分页2.1 请求和响应分析2.2 定义实体类&#xff0c;接收请求参数的JSON对象2.3 编写controller&#xff0c;接收页面的请求2.4 编写业务实现&#xff0c;利用RestHighLevelClient实现搜索、分页 3. 酒店结果过滤3.1 请求和响应分析3.2 修改请求参数…

面试遇到再不怕了:IIC协议

目录 一、IIC简介 二、IIC的通信流程 三、发送1bit数据的流程 四、IIC需要外接上拉电阻 一、IIC简介 I2C&#xff08;Inter-Integrated Circuit&#xff09;&#xff0c;有时也称为IIC或TWI&#xff08;Two-Wire Interface&#xff09;&#xff0c;是一种用于低速度串行通…

Unity 数字字符串逗号千分位

使用InputField时处理输入的数字型字符串千分位自动添加逗号&#xff0c;且自动保留两位有效数字 输入&#xff1a;123 输出&#xff1a;123.00 输入&#xff1a;12345 输出&#xff1a;12,345.00 代码非常简单 using UnityEngine; using TMPro;public class …

Java | Leetcode Java题解之第55题跳跃游戏

题目&#xff1a; 题解&#xff1a; public class Solution {public boolean canJump(int[] nums) {int n nums.length;int rightmost 0;for (int i 0; i < n; i) {if (i < rightmost) {rightmost Math.max(rightmost, i nums[i]);if (rightmost > n - 1) {retu…

Spark调优-解决job任务运行超时或者慢的问题

1 三个参数各自的作用(都配置在spark-default.conf文件中) 1.1 spark.shuffle.io.connectionTimeout (默认值是120s) 这个参数设置了在 shuffle 过程中,当一个 reduce 任务尝试从 map 任务读取数据时,建立连接的超时时间。如果在这个时间内连接没有成功建立,那么 redu…

本地环境运行Llama 3大型模型:可行性与实践指南

简介&#xff1a; Llama 是由 Meta&#xff08;前身为 Facebook&#xff09;的人工智能研究团队开发并开源的大型语言模型&#xff08;LLM&#xff09;&#xff0c;它对商业用途开放&#xff0c;对整个人工智能领域产生了深远的影响。继之前发布的、支持4096个上下文的Llama 2…

LeetCode 每日一题 ---- 【1329.将矩阵按对角线排序】

LeetCode 每日一题 ---- 【1329.将矩阵按对角线排序】 1329.将矩阵按对角线排序方法&#xff1a;模拟 1329.将矩阵按对角线排序 方法&#xff1a;模拟 按每个对角线遍历&#xff0c;将得到的值放入数组中&#xff0c;然后对数组排序&#xff0c;再将数组中的元素再放回去就可…

am62x linux sdk环境搭建

文章目录 3 SDK单机环境搭建1 下载SDK2 安装SDK3 SDK目录4 SDK编译5 编译变量定义工具安装编译目标编译示例6 编译kernel7 编译uboot8 工具链9 测试验证参考3 SDK单机环境搭建 1 下载SDK 入口1: