String常见用法

1.string中内容的访问

通过下标
一般来说,可以直接像字符数组那样去访问string;
示例如下:

#include<cstdio>
#include<iostream>
#include<bits/stdc++.h>
#include<cstring>
using namespace std;

int main(){
	string str = "abcd";
	for(int i=0;i<str.length();i++){
		printf("%c",str[i]);
	} 
	return 0;
}

如果要读入和输出整个字符串,则只能用cin和cout;
示例如下:

#include<cstdio>
#include<iostream>
#include<bits/stdc++.h>
#include<cstring>
using namespace std;

int main(){
	string str;
	getline(cin,str);//获取输入的字符串; 
	cout<<str;
	return 0;
}

也可以用c_str()将string类型转换为字符数组进行。
示例如下:

#include<cstdio>
#include<iostream>
#include<bits/stdc++.h>
#include<cstring>
using namespace std;

int main(){
	string str = "abcd";
	printf("%s/n",str.c_str());
	return 0; 
}

通过迭代器访问
示例如下:

#include<cstdio>
#include<iostream>
#include<bits/stdc++.h>
#include<cstring>
using namespace std;

int main(){
	string str = "abcd";
	for(string::iterator it = str.begin();it!=str.end();it++){
		printf("%c",*it);//输出abcd 
	}
	return 0;
	
}

3.string常用函数

(1)operator+=

这是string的加法,可以将两个string直接拼接起来。
示例如下:

#include<cstdio>
#include<iostream>
#include<bits/stdc++.h>
#include<cstring>
using namespace std;

int main(){
	string str1 = "abc";
	string str2 = "cde";
	string str3;
	str3 = str1+str2;//str1和str2连接起来 
	
	str1 += str2;  //将str2连接到str1后; 
	  
	cout<<str1<<endl;//输出abccde;
	 
	cout<<str3<<endl;//输出abccde; 
	return 0;
}

(2) compare operator

两个string类型可以直接使用==、!=、<、<=、>、>=比较大小,比较规则是字典序。
示例如下:

#include<cstdio>
#include<iostream>
#include<bits/stdc++.h>
#include<cstring>
using namespace std;

int main(){
	string str1 = "aa";
	string str2 = "aaa";
	string str3 = "abc";
	string str4 = "xyz";
	if(str1 < str2){
		printf("ok1\n");//如果str1字典序小于str2,输出ok1; 
	}
	if(st1 != str3){
		printf("ok2\n");//如果str1和str3不等,输出ok2; 
	}
	if(str4 >= str3){
		printf("ok3\n");//如果str4字典序大于str3,输出ok3; 
	}
	return 0;
}

(3)和(4) insert() 和 length() / size()

length()返回string长度,size和length基本一样。

insert(pos,string)在pos号位置插入字符串string。

示例如下:

#include<cstdio>
#include<bits/stdc++.h>
#include<cstring>
using namespace std;

int main(){
	string str1 = "abcxyz";
	string str2 = "opq";
	cout<<str1.length()<<" "<<str1.size()<<endl;// 输出 6 6 
	str1.insert(3,str2);// 往str[3] 的位置上插入opq。 
	cout<<str1<<endl;
	return 0;
}

insert(it,it2,it3),it为原字符串的欲插入位置,it2和it3为待插字符串的首尾迭代器,用来表示串[it2,it3]将被插在it的位置上。

示例如下:

#include<cstdio>
#include<bits/stdc++.h>
#include<cstring>
using namespace std;

int main(){
	string str = "abcxyz";
	string str2 = "opq";
	str.insert(str.begin()+3,str2.begin().str2.end());//在str[3]位置插入str2; 
	cout<<str<<endl;
	return 0; 
}

(5)erase()
删除单个元素
示例如下:

#include<cstdio>
#include<bits/stdc++.h>
#include<cstring>
using namespace std;

int main(){
	string str = "abcdefg";
	str.erase(str.begin()+4);//删除4号位(即e); 
	cout<<str<<endl;
	return 0; 
}

删除一个区间内的元素
第一种方法
示例如下:

#include<cstdio>
#include<bits/stdc++.h>
#include<cstring>
using namespace std;

int main(){
	string str = "abcdefg";
	str.erase(str.begin()+4,str.end()-1);//删除4号位到5号位(即ef); 
	cout<<str<<endl;
	return 0; 
}

第二种方法
示例如下:

#include<cstdio>
#include<bits/stdc++.h>
#include<cstring>
using namespace std;

int main(){
	string str = "abcdefg";
	str.erase(3,2);//删除从3号位开始的两个字符(即de); 
	cout<<str<<endl;//输出abcfg; 
	return 0; 
}

(6)clear()
清空string中的数据。
示例如下:

#include<cstdio>
#include<bits/stdc++.h>
#include<cstring>
using namespace std;

int main(){
	string str = "abcd";
	str.clear();//清空str; 
	cout<<str.length()<<endl;//输出0; 
	return 0; 
}

(7)substrate()
substr(pos,len)返回从pos号位开始、长度为len的子串。
示例如下:

#include<cstdio>
#include<bits/stdc++.h>
#include<cstring>
using namespace std;

int main(){
	string str = "Thank you for your smile.";
	cout<<str.substr(0,5)<<endl;//输出Thank; 
	cout<<str.substr(14,4)<<endl;//输出your; 
	cout<<str.substr(19,5)<<endl;//输出smile; 
	return 0;
}

(8)string::npos和find()
string::npos是一个常数,其本身的值为-1,但由于是usigned_int类型,因此实际上也可以认为是usigned_int类型的最大值。string::npos用以作为find函数失配时的返回值。

str.find(str2),当str2是str的子串时,返回其第一次出现的位置;如果str2不是str的子串,则返回string::npos。
str.find(str2,pos),从str的pos位置开始匹配str2,返回值与上面相同。

示例如下:

#include<cstdio>
#include<bits/stdc++.h>
#include<cstring>
using namespace std;

int main(){
	string str = "Thank you for your smile.";
	string str2 = "you";
	string str3 = "me";
	if(str.find(str2,7) != string::npos){
		cout<<str.find(str2,7)<<endl;//输出14
	}
	if(str.find(str2) != string::npos){
		cout<<str.find(str2)<<endl;//输出6
	}
	if(str.find(str3) != string::npos){
		cout<<str.find(str3)<<endl;//没有找到; 
	}else{
		cout<<"I know there is no position for me."<<endl;
	}
	return 0;
}

(9)replace()
str.replace(pos,len,str2)把str从pos位置开始,长度为len的子串替换为str2。
str.replace(it1,it2,str2)把str的迭代器[it1,it2)范围的子串替换为str2.

示例如下:

#include<cstdio>
#include<bits/stdc++.h>
#include<cstring>
using namespace std;

int main(){
	string str = "Maybe you will turn around.";
	string str2 = "will not";
	string str3 = "surely";
	cout<<str.replace(10,4,str2)<<endl;//将will替换为str2; 
	cout<<str.replace(str.begin(),str.begin()+5,str3)<<endl;//将Maybe替换为surely; 
	return 0;
}

完结。