侧边栏壁纸
  • 累计撰写 192 篇文章
  • 累计创建 2 个标签
  • 累计收到 87 条评论

【算法】字符串

Allen Best
2023-07-13 / 0 评论 / 1 点赞 / 197 阅读 / 2,378 字
温馨提示:
本文最后更新于 2023-08-01,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。
概述

使用string之前,使用字符数组存储字符串,使用上比较受限制,

C++提供新的string类型,代替c语言中的字符数组。相对于字符数组,string类型更加灵活方便。
image.png

image.png
image.png

定义
string s1;//s1是一个空串
输入输出
int main(){
	string s1;
	cin>>s1;//输入s1
	cout<<s1<<endl;//输出s1
	return 0;
}
*读取并忽略开头的所有空白字符
*读取字符直到再次遇到空白字符,读取停止。(不含空格)
 int main(){
	string s1,s2;
	cin>>s1>>s2;//输入s1
	cout<<s1<<s2<<endl;//输出s1
	return 0;
}   
//读入未知数目的string对象
int main(){
    string s;
    while(cin>>s){//输入操作符会返回读的数据流,可以作为判断条件
        cout<<s<<endl;
    }
    return 0;
}
//读入带空格的字符串getline()函数
int main(){
    string s;
    getline(cin,s);
    cout<<s<<endl;
    return 0;
}

转 char 数组

c_str()
printf("%s", s.c_str());

基本操作
//判断字符串是否为空
s.empty();
//返回字符个数
s.size() 或者 s.length()
//使用下标访问或修改某个位置的元素,下标从0开始
s[0],s[s.size()-1]

寻找某字符(串)第一次出现的位置

find(str,pos) 函数可以用来查找字符串中一个字符/字符串在 pos(含)之后第一次出现的位置(若不传参给 pos 则默认为 0)。如果没有出现,则返回 string::npos

	若判断查找的值不存在
	s.find("st") == s.npos

截取子串

substr(pos, len) 函数的参数返回从 pos 位置开始截取最多 len 个字符组成的字符串(如果从 pos 开始的后缀长度不足 len 则截取这个后缀)。

插入/删除字符(串)

insert(index,count,ch) 和 insert(index,str) 是比较常见的插入函数。它们分别表示在 index 处连续插入 count 次字符串 ch 和插入字符串 str。

erase(index,count) 函数将字符串 index 位置开始(含)的 count 个字符删除(若不传参给 count 则表示删去 count 位置及以后的所有字符)。

替换字符(串)

replace(pos,count,str) 和 replace(first,last,str) 是比较常见的替换函数。它们分别表示将从 pos 位置开始 count 个字符的子串替换为 str 以及将以 first 开始(含)、last 结束(不含)的子串替换为 str,其中 first 和 last 均为迭代器。

数值转换

stoi
(C11)转换字符串为有符号整数(函数)
stof
(C
11)转换字符串为浮点值(函数)

NOIP的同学需要注意:
需要用atoi(s.c_str()) 替换stoi

//string 关系运算符
int main(){
string s1,s2;
cin>>s1>>s2;
//按照字典序比较大小。
//两个长度不同,短的字符与长的相同,则短的小
//两个字符串字符不相同,按第一个不相同的字符比较
cout<<s1==s2<<endl;
cout<<s1!=s2<<endl;
cout<=s2<<endl;
cout<<s1<=s2<<endl;
cout<s2<<endl;
cout<<s1<s2<<endl;
return 0;
}
//+ 或 += 将两个字符串连接在一起
string s3=s1+s2;
s1+=s2;

字符处理函数
//对字符串中的单个字符进行判断,例如是否为数字,字母等
//所属头文件<cctype>
isalpha(c)//是否是字母
isalnum(c)//是否是数字或字母
isdigit(c)//是否是数字
islower(c)//是否是小写字母
isupper(c)//是否是大写字母

image.png

计算字符串长度 s.size()

#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
#define N 10001
using namespace std;
string s1,s2,x;
int main(){
	s1="abcdedfg";
	x="dfff";
	if(s1.find(x)!=-1){
		cout<<"找到子串!"<<endl;
	}else{
		cout<<"未找到子串"<<endl; 
	}
return 0;
}


#include<bits/stdc++.h>
using namespace std;
//查找子串的数量,并全部删除。 
string s1="abcccdefcccgcccc",s2;
int cnt=0;
int main(){
	s2="ccc";
	while(1){
		if(s1.find(s2)!=-1){
			s1.erase(s1.find(s2),s2.size());
			cnt++;
		}else{
			break;
		}
	}
	cout<<cnt<<endl;
	cout<<s1<<endl;
	return 0;
}

0

评论区