string

string

对字符串常用的需求功能进行了封装,使得操作起来更方便且不易出错,在使用时需加上 string 头文件,即 #include <string>,并在头文件下加上 “using namespace std;”。

1. string 的定义

string str;

如果要初始化可以直接给 string 类型的变量进行赋值:

string str = "abcd" 

2. string 中内容的访问

(1) 通过下标访问

//类似字符串数组访问字符串
#include <cstdio>
#include <string>
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 <iostream>
#include <string>
using namespace std;
int main () {
	string str = "abcd" ;
	cout<<str ;
	return 0 ;
}

(2) 通过迭代器访问

迭代器的定义:

string::iterator it;

通过 *it 访问 string 里的每一位

#include <cstdio>
#include <string>
using namespace std;
int main () {
	string str = "abcd" ;
	for (string::iterator it = str.begin(); it != str.end(); it++) {
		printf ("%c", *it) ;
	}
	return 0 ;
}

3. string 常用函数实例解析

(1) operator+=

//operator+=:实现将两个 string 直接拼接起来
#include <iostream>
#include <string>
using namespace std;
int main () {
	string str1 = "abc" ;
	string str2 = "def" ;
	cout<<str1+str2<<endl ;
	return 0 ;
} 

(2) compare operator

//按字典序比较两个 string
#include <cstdio>
#include <string>
using namespace std;
int main () {
	string str1 = "aa", str2 = "aaa", str3 = "aaa" ;
	if (str1 < str2) printf ("YES\n") ;
	if (str2 == str3) printf ("YES\n") ;
	return 0 ;
} 

(3) length()/size()

//length()返回 string 的长度
#include <cstdio>
#include <string>
using namespace std;
int main () {
	string str = "abcd" ;
	printf ("%d", str.length()) ;
	return 0 ;
} 

(4) insert()

i) insert(pos, string)

//在 pos 下标处插入 string
#include <iostream>
#include <string>
using namespace std;
int main () {
	string str = "abc", str1 = "111" ;
	str.insert(0, str1) ,
	cout<<str<<endl ;
	return 0 ;
}

ii) insert(it, it1, it2)

//it 为被插入字符串要插入的位置下标,it1 和 it2 为带插入字符串的首尾迭代器,表示将串的 [it1, it2) 插入 it 的位置上
#include <iostream>
#include <string>
using namespace std;
int main () {
	string str = "012345", str1 = "abcdefg" ;
	str.insert(str.begin()+3, str1.begin(), str1.end()) ;
	cout<<str<<endl ;
	return 0 ;
}

(5) erase()

i) 删除单个元素

#include <iostream>
#include <string>
using namespace std;
int main () {
	string str = "abcdefg" ;
	str.erase(str.begin()) ;
	cout<<str<<endl ;
	return 0 ;
} 

ii) 删除区间内所有元素

  • 按首尾位置删除
//erase(first, last):删除 [first, last) 内的所有元素, 用迭代器表示
#include <iostream>
#include <string>
using namespace std;
int main () {
	string str = "0123456" ;
	str.erase(str.begin(), str.begin()+3) ;
	cout<<str<<endl ;
	return 0 ;
} 
  • 按首或尾位置加上删除字符个数
//erase(pos, length):pos 直接用下标表示 
#include <iostream>
#include <string>
using namespace std;
int main () {
	string str = "0123456789" ;
	str.erase(2, 4) ;
	cout<<str<<endl ;
	return 0 ;
} 

(6) clear()

//clear():用以清空 string 中所有元素
#include <iostream>
#include <string>
using namespace std;
int main () {
	string str = "abcdefg" ;
	str.clear() ;
	cout<<str.length()<<endl ;
	return 0 ;
} 

(7) substr()

//substr(pos, len):返回从 pos 号下标开始长度为 len 的字串
#include <iostream>
#include <string>
using namespace std;
int main () {
	string str = "0123456789" ;
	cout<<str.substr(3, 3)<<endl ;
	return 0 ;
} 

(8) string::npos

string::npos 是一个常数,用以作为 find 函数失配时的返回值

(9) find()

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

#include <iostream>
#include <string>
using namespace std;
int main () {
	string str = "abcdefghi", str1 = "abc" ;
	if (str.find(str1) != string::npos) {
		cout<<str.find(str1)<<endl ;
	}
	if (str.find(str1, 1) != string::npos) {
		cout<<str.find(str1, 1) ;
	} else {
		cout<<"False"<<endl ;
	} 
	return 0 ;	
}

(10) replace()

str.replace(pos, len, str2):把 str 从 pos 下标开始长度为 len 的字串替换为 str2
str,replace(it1, it2, str2):把 str 的迭代器 [it1, it2) 范围的字串替换为 str2

#include <iostream>
#include <string>
using namespace std;
int main () {
	string str = "0123456789", str1 = "aaa" ;
	cout<<str.replace(2, 1, str1)<<endl ;	
	//将str中的'2'换成 str1 即 01aaa3456789
	cout<<str.replace(str.begin()+5, str.begin()+6, str1) ;	
	//将更新后的 str 中的'3'换成str1 即 01aaaaaa456789
	return 0 ;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值