首页 > 其他分享 >【Cpp 语言基础】 string 类型进阶使用

【Cpp 语言基础】 string 类型进阶使用

时间:2023-12-27 21:44:23浏览次数:43  
标签:std 进阶 str1 字符串 npos Cpp find string

大纲:

1. 特殊的初始化方式

2. 获取子串

3. 与<algorith>中对应的成员函数

 

”串“类型类似于数组类型(C语言的字符串就是字符数组)。但是有一点不同之处,就是串经常作为一个整体才有实际的”意义“,而数组每个单元都有其”意义“。

因此,“串”的操作中,很大部分是“串”的整体、局部为单元,而非以个体为单元。

1. 特殊的初始化方式

除了采用以下传统的方式初始化,sting类型还有其他方式初始化:

string str1;
string str1(str2);
string str1(cstr);//cstr表示 C风格的字符串
string str1("Hello world");

其他的初始化方式大多与子串有关。

string str1(cstr, n);//n为C风格字符数组的下标
string str1(cstr, n, cnt);
string str1(str2, n);
string str1(str2, n, cnt);

string str1(str2, iter);//iter为string类型的迭代器,类似于vector<char>类型的迭代器
string str1(str2, iter1, iter2);

2. 获取子串 str.substr()方法

可以利用 string 类的substr()方法来求取子串:

string str1 = str2.substr(n1, n2);
string str1 = str2.substr(n1);

3. 与<algorithm>中对应的成员函数

 algorithm标准库中,有针对 vector类型的泛型算法,比如 find(), sort(), stable_sort() 等等函数,其基于迭代器。

但 string 类型的迭代器不常用,当用到算法的时候,string类型有其自己的一套“私人武器“。

比如 str.find() ,应用如下所示:

std::string myString = "Hello, world!";

size_t found = myString.find("Cat");
if (found == std::string::npos) {
    std::cout << "Substring not found." << std::endl;
} else {
    std::cout << "Substring found at position " << found << std::endl;
}

在上面的例子中,我们使用find()函数查找子字符串"Cat"在myString中的位置。如果子字符串不存在,则find()函数返回std::string::npos,我们可以使用它来判断子字符串是否存在于原字符串中。 

里面的 std::string::npos 是什么意思?

#include <iostream>
#include <string>

using namespace std;
int main()
{
    //不能单独使用 npos,哪怕声明了 using namespace std;
    //cout << "npos == " << npos <<endl; //编译出错:error: 'npos' was not declared in this scope
    cout << "npos == " << string::npos <<endl; //输出为:npos == 4294967295
    return 0;
}

std::string::npos是C++标准库中string类的静态成员变量,它表示一个无效的或者不存在的字符串位置或索引。这个值在string类中通常用于查找或搜索某个子字符串或字符的位置,当find()rfind()等函数无法找到所需的子字符串或字符时,它们会返回std::string::npos作为标记表示查找失败。

std::string::npos的值通常是一个非常大的整数,因为它需要能够区别于任何字符串中可能出现的有效位置或索引。具体的值可能因实现而异,但通常被定义为-14294967295std::string::size_type类型的最大值,通常为无符号整数类型)。

在使用find()rfind()等函数时,我们通常使用std::string::npos作为查找失败的返回值的标记。

 

标签:std,进阶,str1,字符串,npos,Cpp,find,string
From: https://www.cnblogs.com/FBsharl/p/17931503.html

相关文章

  • LocalDateTime、LocalDate、Date、String相互转化
    为什么日期有Date了,还在JDK8中推出了LocalDateTime、LocalDate呢?非线程安全的方法Date类的大部分方法都不是线程安全的,比如setYear()、setMonth()、setDate()、setHours()、setMinutes()、setSeconds()等方法。这些方法都可以修改Date对象的内部状态。如果多个线程同时访问和......
  • cpp取系统时钟
    //test.cpp:定义控制台应用程序的入口点。//#pragmawarning(disable:4996)#include"stdafx.h"#include"time.h"#include"windows.h"#include<iostream>usingnamespacestd;void取系统时间(){ time_ttimer;//time_t实际是int64 str......
  • STL-常用容器-string
    3STL-常用容器3.1string容器3.1.1string基本概念本质:string是C++风格的字符串,而string本质上是一个类string和char*区别:char*是一个指针string是一个类,类内部封装了char*,管理这个字符串,是一个char型的容器。cplusplus.com/reference/string/string/也可打开上面这个网站查......
  • StringBuilder,一种可变的string
    StringBuilder是Java中用于操作字符串的可变对象。它允许在字符串中进行修改、添加、删除字符等操作,而不会像普通的字符串操作(例如使用String类)那样产生新的字符串对象。这种可变性使得在处理大量字符串拼接或修改时更加高效。与String不同,StringBuilder是可变的,这意味......
  • 【Cpp 语言基础】vector像数组一样地初始化多个元素
    一般的vector的初始化有两种方式,push_back和(n,val)方式vector<int>vect;//一般方式vect.push_back(10);vect.push_back(20);//Createavectorofsizenwith//allvaluesas10.vector<int>vect(n,10);但是也可以像C语言的数组一样初始化://方式3:直接像数组一......
  • Linux进阶(二)
    一、常用的一些基本命令1、管理文件和目录的命令命令功能命令功能pwd显示当前目录ls查看目录下的内容cd改变所在目录cat显示文件的内容grep在文件中查找某字符cp复制文件touch创建文件mv移动文件rm删除文件rmdir删除目录2、在文件系统中查找文件和目录find/home/soft-name"file_......
  • C# 返回字符串 string 中某一个字符第几次出现的位置所在的索引位置
    //返回str从前往后,第count次出现ch字符处的索引位置,失败返回-1;protectedstaticintIndexOf(stringstr,charch,intcount){if(count<1){return-1;}intindex=-1;for(inti=0;i<count;++i){......
  • 无涯教程-PostgreSQL - String函数
    PostgreSQL字符串函数主要用于字符串操作。下表详细介绍了重要的字符串函数-S.No.Name&描述1ASCII()返回最左边字符的数值2BIT_LENGTH()返回参数的长度(以位为单位)3CHAR_LENGTH()返回参数中的字符数4CHARACTER_LENGTH()CHAR_LENGTH()的同义词5CONCAT_WS......
  • 23-String类
    String类的特点1. Java程序中,所有双引号字符串,都是String这个类的对象2.字符串一旦被创建,就不可更改(如果想更改,只能使用新的对象做替换)3. 字符串常量池,让我们使用双引号创建字符串对象时,会先去常量池中查找有没有相同内容的字符串对象,如果有,则直接使用该对象,如果没有,则在常......
  • 《Kubernetes从入门到进阶》之一: 认识Kubernetes
    01容器技术在早期的传统架构中,应用程序是直接部署在物理机上的。在这种场景下,由于无法对程序的资源使用进行限制,容易出现不同程序争抢资源的问题,并且程序之间还可能互相影响。这使得往往需要按照应用来划分机器,并造成了较大的资源浪费。 后来,虚拟机(VM)的出现改变了这种现状。......