c++的字符串string

目录

string的概念

string的基本操作

创建

输入

​编辑

获取长度

迭代器

begin()和end()

尾插函数

+=和+运算

尾删pop_back()

insert()插入

find查找

substr()

关系运算

[字符串和int 值的转换。](#字符串和int 值的转换。)


string的概念

string是c++专门创建的字符串类型,为了方便操作字符串。

string中很多的方法。

string的基本操作

首先要包含头文件string.

创建

有初始化的创建,它的末尾不以'\0'为结尾。

cpp 复制代码
#include <iostream>
#include<string>
using namespace std; 
int main() {
	string a="hello world";
    //string a("hello world");
	cout<<a;
	return 0;
}

string可以直接赋值

cpp 复制代码
#include <iostream>
#include<string>
using namespace std; 
int main() {
	string a;
	string b("hello world");
	a=b;
	cout<<a;
	return 0;
}

输入

cin输入,不能输入空格

cpp 复制代码
#include <iostream>
#include<string>
using namespace std; 
int main() {
	string a;
	cin>>a;
	cout<<a;
	return 0;
}

getline是c++标准函数,读取一行文本存储为字符。

istream&getline(istream& is,string&str);遇到'\n'停止。

cpp 复制代码
#include <iostream>
#include<string>
using namespace std; 
int main() {
	string a;
	getline(cin,a); 
	cout<<a;
	return 0;
}

istream&getline(istream& is,string&str,char delim);直到遇到delim字符停止

cpp 复制代码
#include <iostream>
#include<string>
using namespace std; 
int main() {
	string a;
	getline(cin,a,'m');//读到m停止 
	cout<<a;
	return 0;
}

获取长度

size(),string有很多函数,用 . 使用

cpp 复制代码
#include <iostream>
#include<string>
using namespace std; 
int main() {
	string b;
	string a="abcd"; 
	string c="abcdefg";
	string d="j k l l l";
	cout<<a.size()<<endl;
	cout<<b.size()<<endl;
	cout<<c.size()<<endl;
	cout<<d.size()<<endl;
	return 0;
}

string的数据也有下标和正常创建的字符数组一样从0开始。

迭代器

用来遍历容器元素。

iterator类似指针,数组下标。

需要*解引用。

begin()和end()

begin()指向第一个位置,end()指向最后的下一个位置,不存在于字符串。

可以比较大小,加减。

cpp 复制代码
#include <iostream>
#include<string>
using namespace std; 
int main() {
	string a="hello world";
	string::iterator it1=a.begin();
	string::iterator it2=a.end();
	if(it1<it2)
		cout<<"<"<<endl;
	else
		cout<<">"<<endl;
	return 0;
}

可以通过*解引用,输出存储的字符。

cpp 复制代码
#include <iostream>
#include<string>
using namespace std; 
int main() {
	string a="hello world";
	string::iterator it1=a.begin();
	string::iterator it2=a.end();
	cout<<*it1<<endl;//[0]
	it1++;
	cout<<*it1<<endl;//[1]
	it1--;
	cout<<*it1<<endl;//[0]
	return 0;
}

使用迭代器遍历。

cpp 复制代码
#include <iostream>
#include<string>
using namespace std; 
int main() {
	string a="abcdef";
	string::iterator it1=a.begin();
	string::iterator it2=a.end();
	for (string::iterator i = a.begin(); i != a.end(); ++i) {
        cout << *i;
    }
	cout<<endl;
	for(auto i=it2-1;i>=it1;--i){
		cout<<*i;
	}
	return 0;
}

还有反向迭代器,reverse_iterator 类型的rbegin(),rend()刚好相反。

尾插函数

a.push_back();在字符串尾部插入字符

cpp 复制代码
#include <iostream>
#include<string>
using namespace std; 
int main() {
	string a="abcdef";
	cout<<a<<endl;
	a.push_back('g');
	cout<<a<<endl;
	return 0;
}

+=和+运算

也可以头部拼接。

尾删pop_back()

空的情况下删除会报错。

insert()插入

a.insert(pos , str),在a字符串中的pos位置前插入,str字符串。str可以是string类型的内容,可以是字符串如下图。

a.insert(pos,n,str)插入n个str的字符到pos前。

cpp 复制代码
#include <iostream>
#include<string>
using namespace std; 
int main() {
	string a="abcdef";
	cout<<a<<endl;
	a.insert(3,"6");
	cout<<a<<endl;
	return 0;
}

find查找

a.find()返回第一次出现的位置。它的返回值是size_t,相当于下标

a.find(str,位置(默认0))

cpp 复制代码
#include <iostream>
#include<string>
using namespace std; 
int main() {
	string a="abcdef abc def l g k";
	string b="de";
	string c="l";
	size_t t=a.find(b);
	cout<<t<<endl;
	cout<<a.find(b,t+1)<<endl;
	return 0;
}

a.find(char*,size_t pos);

可以查找c风格的字符串。

a.find(str,size_t pos ,n)a字符串中查找str前n给字符

也可以找字符。str

找不到会放回-1;无符号整型的-1。2^32-1;

substr()

a.substr(pos,len=npos);pos截取的开始,npos截取的长度。pos默认为0,npos默认到字符串末尾

的长度。

用于截取a字符串pos位置开始n个的字符。

cpp 复制代码
#include <iostream>
#include<string>
using namespace std; 
int main() {
	string a="abcdefghi";
	string b=a.substr(3,3);
	string c=a.substr(3);
	cout<<b<<endl;
	cout<<c<<endl;
	return 0;
}

关系运算

==,至少有一个str的字符才可以比较,比较的ascii值对应位置。

cpp 复制代码
#include <iostream>
#include<string>
using namespace std; 
int main() {
	string a="abcdefghi";
	string b="abcdefghi";
	if(a==b)
		cout<<"=="<<endl;
	string c="abcdefgh";
	if(a!=c)
		cout<<"!="<<endl;
	string d="b";
	if(a<d)
		cout<<"<"<<endl;
	string e="aa";
	if(a>e)
		cout<<">"<<endl;
	return 0;
}

字符串和int 值的转换。

stoi/stol,stol是int ,stol是long int。

int stoi(str,size_t* idx=0,int base=0)

long stol(str,size_t* idx=0,int base=0)

str是string类型的字符串。

idx是一个指针,从idx位置开始到第一个无法匹配的下标返回

如"123q"返回q的位置

base表示被解析的数字的进制,

2表示被解析的数字当作2进制数字,转化为10进制。

0是自动推到如0x是16,0是8;

复制代码
#include <iostream>
#include<string>
using namespace std; 
int main() {
	string a="123p";
	size_t t=0;
	int b=stoi(a,&t,10);
	int c=stoi(a,&t,8);
	cout<<b<<endl;
	cout<<c<<endl;
	return 0;
}

stod转化为double,stof转化为float

stod(str,size_t* idx);只有10进制。

stof(str,size_t* idx);

to_string

把数字转换为字符串。

反转字符串

reverse要包含头文件algorithm.

reverse(首元素的地址,反转范围末尾的下一个元素)。

cpp 复制代码
#include <iostream>
#include <string>
#include <cstdio>
#include <algorithm>
using namespace std; 

int main() {
    string str;
    cin>>str;
	reverse(str.begin(),str.end());
	cout<<str;
    return 0;
}
相关推荐
程序员与背包客_CoderZ34 分钟前
高性能分布式KV存储引擎RocksDB入门与C/C++编码实战
c语言·开发语言·数据库·c++·分布式·分布式数据库·rocksdb
进击的_鹏36 分钟前
从零开始的 Redis 学习
服务器·数据库·c++·redis·缓存
钱栈up43 分钟前
Mac 开发机一键发版不用切环境:我这样改造了团队的后端部署脚本Maven编译卡住20分钟?我靠两步定位到2处隐蔽编译错误
开发语言·python·macos
william_yangshun1 小时前
【大模型部署实战】kimi-k3-in-c 中文版:用 176KB 纯 C99 引擎在 CPU 上跑 Kimi K3 上手指南
c语言·开发语言
Sagittarius_A*1 小时前
Burst Lab | PHP 审计 14|反序列化(四):字符串逃逸与绕过技巧
开发语言·安全·php·web·反序列化
名字还没想好☜1 小时前
Go 用 slices/maps 标准库泛型函数:告别手写 Contains、Sort、去重(Go 1.21)
开发语言·后端·算法·golang·go
淼澄研学1 小时前
Python实战:基于LangChain与Chroma构建企业级RAG知识库问答系统
开发语言·python·langchain
4311媒体网2 小时前
帝国CMS网站自定义搭建技巧
服务器·开发语言·前端
_Narcissus_2 小时前
链表算法题和静态链表
数据结构·c++·笔记·算法·链表·ai·力扣
布莱克6052 小时前
C++拷贝构造与拷贝赋值运算符的区别详解
开发语言·c++