C++/C中常用string类的详细用法(笔记

string类简介

string类是C++STL标准模板中的一种,它的用法很多,针对每种,我给出一个实例,便于理解

声明一个字符串

定义

或者说构造一个字符串,初始一个字符串,建立一个字符串,就和你建立一个数组int a[]类似,具体介绍放在代码里

Codes

#include<iostream>
#include<string>
using namespace std;
int main(){
//注释不明白没关系,运行程序输出一下就明了多了 
 	string s1();//声明一个空的字符串,就是null,s1="";
 	string s2("Beautiful!");//声明一个字符串s2="Beautiful";
 	string s3(5,'H');//输出5个H,s3="HHHHH",哈哈哈哈哈
 	string s4("IAmSmart",1,2);//注意,你可以把s4本身理解为一个数组
 //s4[0]='I',s4[1]='A',s4[7]='t' 
 	string s5("IAmSmart",3,7);
//输出
 	cout<<"字符串s2: "<<s2<<endl;
 	cout<<"字符串s3: "<<s3<<endl;
 	cout<<"字符串s4: "<<s4<<endl;
	cout<<"字符串s5: "<<s5<<endl;
//以上是string的构造函数
//下面我们看看对string对象赋值  
 	string str;//声明了str是一个字符串,
 //其实它的用法和char str[]差不多,不同的是string本身有范围限制 
 //貌似是2GB,就是2048MBchar str[maxn]就不一样了 ,你可以
 //把const int maxn=1e9;可以自己定义 
 	char ch[8]={"ABCDEFG"};//貌似最后一个字符默认'\0',是吗? 
 	str="ABCDEFG";
 	cout<<"这是str: "<<str<<endl;
 	cout<<"这是ch[8]: "<<ch<<endl; 
//string还有一个方法涅
 	string b1,b2,b3,b4; 
 	string a1("123456789"),a2,a3,a4;
 	b1=a1;
	 b2=a2.assign(a1);//copy,复制,a2=a1
 	b3=a3.assign(a1,1,5);//b3=23456
 	b4=a4.assign(5,'W');
 	cout<<"这是b1: "<<b1<<endl; 
 	cout<<"这是b2: "<<b2<<endl;
 	cout<<"这是b3: "<<b3<<endl;
 	cout<<"这是b4: "<<b4<<endl;
 	return 0;
}

运行结果

在这里插入图片描述

求字符串的长度

简析

对于string嘛,最直接的有两种,但是对于char ch[]有1种(它们都有阔能有很多种,只是我只写知道的,读者可以在评论区补充的(* ̄︶ ̄).

string s;
s.size()//输入字符串长度
s.length()//输入字符串长度,和上面一样
char ch[100];//比如我输入ch=“ABCD”;//不包括双引号
strlen(ch);//应该为4
sizeof(ch);//应该为100

Codes

#include<iostream>
#include<string>
#include<cstring>
using namespace std;
const int maxn=1e5+10;
int main(){
     char ch[maxn];//注意,我给ch数组分配的空间1e5+10,也就说size(ch)=maxn; 
     string str,s;
     int lch,lstr,ls,LM;
     cout<<"请输入ch[]: "; 
     cin>>ch;
     cout<<"请输入str:   ";
     cin>>str;
     cout<<"请输入s:     ";
     cin>>s;
     lch=strlen(ch);//记住使用头文件#include<cstring>或者#include<string.h> 
     lstr=str.size();
     ls=s.length();
     LM=sizeof(ch);
     cout<<"lch="<<lch<<"   lstr="<<lstr<<"   ls="<<ls<<endl;
     cout<<"LM=  "<<LM<<endl;
     return 0;
}

运行结果

在这里插入图片描述

字符串的连接

简析

这小块讲的是如何把两个字符串拼在一起,变成一个字符串
比如s1=“123”,s2="ABC"我想得到一个s=“123ABC”
直接调用s.append就可以了

s.append有4种用法,可能吧
string s1(“123”), s2(“ABC”);
s1.append(s2); // s1 = “123ABC”
s1.append(s2, 1, 2); // s1 = “123ABCBC”
s1.append(3, ‘H’); // s1 = “123ABCBCHHH”
s1.append(“ABCDE”, 2, 3); // s1 = “123ABCBCHHHCDE”,添加 “ABCDE” 的子串(2, 3)

Codes

#include<iostream>
#include<string>
#include<cstring>
using namespace std;
int main(){
     string s1("123"),s2("abcd");
     cout<<s1.append(s2)<<endl;
     cout<<s1.append(s2,1,2)<<endl;
     cout<<s1.append(3,'H')<<endl;
     cout<<s1.append("SIJKLMN",2,4)<<endl;//S是第一个字符 
     //2就是从第2个字符,就是J开始,输出后面4个字符 
     return 0;
}

运行结果

在这里插入图片描述

字符串的比较

简析

比较就是孰大孰小和相等,这个就不多说

int flag=s1.compare(s2);
flag的值
-1表示s1比s2小,但s1和s2长度相同
0表示s1=s2
1表示s1和s2长度相同,但是字典序不一样,s1大于s2
x表示s1比s2长度大x
-x表示s1比s2长度小x

Codes

#include<iostream>
#include<string>
#include<cstring>
using namespace std;
int main(){
	while(1){
		int flag;
		string s1,s2;
		cout<<"请输入s1:";
		cin>>s1;
		cout<<"请输入s2:";
		cin>>s2;
		flag=s1.compare(s2);
		cout<<"flag的结果是:"<<flag<<endl;
	}
	return 0;
}

运行结果

在这里插入图片描述
比较类函数还有一些用法,具体参考C++string类

我写得不是很全面

求字符串的子串

简析

这个求子串就是比如我有一个字符串“abcdefg”,我想得到abcd,或者def
那么我就需要调用substr

string s1("abcdefg");
string s2=s1.substr(0,3);//s2="abc",表示从开始,截取3个字符
s2=s1.substr(4);//s2="efg"
s2=s1.substr(1,5);//表示从1号位起,截取5个字符

Codes

#include<iostream>
#include<string>
#include<cstring>
using namespace std;
int main(){
    string s1,s2;
    cin>>s1;
    s2=s1.substr(3); 
    cout<<s2<<endl;
    s2=s1.substr(0,3);
    cout<<s2<<endl;
    s2=s1.substr(2,4);
    cout<<s2<<endl;
    return 0;
}

运行结果

在这里插入图片描述

交换两个字符串

简析

类似于swap函数
string s1(“you”),s2(“me”);
s1.swap(s2);

Codes

#include<iostream>
#include<string>
#include<cstring>
using namespace std;
int main(){
    string s1("you"),s2("me");
    cout<<"初始s1: "<<s1<<"  初始s2 :"<<s2<<endl;
    s1.swap(s2);
    cout<<"交换后s1: "<<s1<<"  交换后s2: "<<s2<<endl;
    return 0;
}

运行结果

在这里插入图片描述

字符串的查找函数

简析

查找函数find,可以用来查找某个字符或者子串。
下图引用自C语言中文网
在这里插入图片描述

Codes

#include<iostream>
#include<string> 
using namespace std;
int main(){
	string s;
	int flag;//注意此时不能有空格 
	cout<<"请输入一个字符串:\n";
	cin>>s;
	cout<<"查找字符串中的B的结果为第一个B出现的位置:";
	flag=s.find('B');
	cout<<flag<<endl;
	cout<<"查找study 的位置:";//会返回s的位置 
	flag=s.find("STUDY");
	cout<<flag<<endl; 
	return 0;
}

运行结果

在这里插入图片描述

替换字符串中的子串

简析

所谓替换子串就比如
I AM A STUDENT
I WAS A STUDENT
现在我想把AM替换为WAS,那么调用replace函数

Codes

#include<iostream>
#include<string> 
using namespace std;
int main(){
	string s("I AM A GOOD STUDENT");
	cout<<s<<endl;
	s.replace(2,2,"WAS",0,3);//
	//replace(参数1,参数2,参数3,参数4,参数5)
	//参数1:字符串中的位置  参数2:替换的字符串长度
	//用来替换的字符串
	//参数4,用来替换的字符串起始位置 参数5:用来替换的字符串长度 
	cout<<s<<endl;
	int f=s.find("GOOD");
	s.replace(f,4,"PERFECT");//GOOD长4,f是G的位置 
	cout<<s<<endl;
	return 0;
}

运行结果

在这里插入图片描述

删除字符串的某个子串

简析

比如ABAABBBABABBAAAAA
我想删除所有的B,那么字符串就变为AAAAAAAAAA
或者字符串I LIKE CAT AND DOG
我想删除DOG
亦或是AA BB CC DD,删除字符串中所有空格

Codes

#include<iostream>
#include<string> 
using namespace std;
int main(){
	int n;
	string s("ABAABBBABABBAAAAA"),
	st("I LIKE CAT AND DOG"),
	str("AA BB CC DD");
	for(int i=0;i<s.length();i++){
		n=s.find('B');
		if(n!=-1)
			s=s.erase(n,1);
		else break;
	}
	cout<<s<<endl;
	st=st.erase(10,8);//空格算一个字符 
	//erase(参数1,参数2)参数1是位置,参数2是要删除字符串长度 
	cout<<st<<endl;
	for(int i=0;i<str.length();i++){
		n=str.find(' ');
		if(n!=-1)
			str=str.erase(n,1);
		else break;
	}
	cout<<str<<endl; 
	return 0;
}

运行结果

在这里插入图片描述

插入某个字符串

简析

比如AAAA,我想让它变成AABAA,就要插入一个B
比如一个字符串 I READING.插入一个LIKE让它变成
I LIKE READING

Codes

#include<iostream>
#include<string> 
using namespace std;
int main(){
	int n;
	string s("AAAA"),
	st("I  READING");
	cout<<s.insert(2,3,'B')<<endl;//
	//insert(参数1,参数2,参数3)参数1位置,参数2插入字符个数,参数3字符 
	//insert(参数1,参数2)参数1是位置,参数2是字符串 
	cout<<st.insert(2,"LIKE")<<endl;
	
	return 0;
}

运行结果

在这里插入图片描述

输入带有空格的字符串

简析

通常我们定义一个字符串,string str;我们想输入"I am a student"
但是用cin的话会遇到空格或者换行导致结束
所以此时我们引入一个输入getline(cin,str);//参数1是cin,参数2是输入字符串的名字

Codes

#include<iostream>
#include<string>
using namespace std;
int main(){
    string s1, s2;    
    //cin >> s1;    
    //cout << s1 << endl;    
    getline(cin, s2);    
    cout << s2 << endl;    
    system("pause");    
    return 0;
}

运行结果

在这里插入图片描述
在这里插入图片描述

补充(小插曲

简析

有时候会有cin.get(str,length)这个输入方式,参数1是字符串变量名,参数2是字符串最大长度,而且它可以不用string

Codes

#include<iostream>
using namespace std;
int main(){    
	char ch[100];    
	//cin >> ch;//在不知道输入的字符串长度情况下    
	/*    
	如果知道字符串长度,那么可以使用for循环一个字符一个的输入    
	比如hello world长度连上空格共为11,那么使用循环也可以输出空格    
	for(int i=0;i<11;i++)        
		cin>>ch[i];   
	for(int i=0;i<11;i++)       
		cout<<ch[i];    
	*/    
	cin.get(ch, 100);    
	cout << ch << endl;    
	system("pause");    
	return 0;
}

运行结果

在这里插入图片描述
在这里插入图片描述

  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值