C++中 string 使用详细说明

一、string 的介绍

如果要使用 string ,需要添加 string 头文件,即 #include注意:string.h 和 string 是不一样的头文件)。

 

二、string 的定义

定义 string 的方式跟基本数据类型相同,只需要在 string 后跟上变量名即可。

string str;

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

string str = “abcd”;


 

三、string 中内容的访问

 

(1)通过下标访问

一般来说,可以直接像字符数组那样去访问 string。

如果要读入和输出整个字符串,则只能用 cin 和 cout 。

那么,如何用 printf 来输出 string 呢? 可以用 c_str() 将 string 类型转换为字符数组进行输出。示例如下:

#include
#include
using namespace std;
int main()
{
	string str="abcd";
	printf("%s\n", str.c_str());//将string 型str 使用c_str()变为字符数组。
	return 0;
}

C++中 string 使用详细说明_第1张图片

 

(2)通过迭代器访问

由于 string 不像其他 STL 容器那样需要参数,因此可以直接如下定义:

string::iterator it;

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

C++中 string 使用详细说明_第2张图片

最后指出,string 和 vector 一样,支持直接对迭代器进行加减某个数字,如 str.begin()+3 的写法是可行的。

 

 

四、string 常用函数实例解析

(1)operator+=

这是 string 的加法,可以将两个 string 直接拼接起来。

#include
#include
using namespace std;
int main()
{
	string str1="abcd", str2 = "xyz",str3;
	str3 = str1 + str2;
	str1 += str2;
	cout << str3 << endl;
	cout << str1 << endl;
	return 0;
}

C++中 string 使用详细说明_第3张图片

(2)compare operator

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

#include
#include
using namespace std;
int main()
{
	string str1="aa", str2 = "aaa",str3 = "abc",str4 = "xyz";
	if (str1= str3)
	{
		cout << "ok3" << endl;
	}
	return 0;
}

C++中 string 使用详细说明_第4张图片

(3)length()/size()

length() 返回 string 的长度,即存放的字符数,时间复杂度为 O(1)。size() 与 length() 基本相同。

(4)insert()

string 的 insert() 函数有很多种写法,这里给出几个常用的写法,时间复杂度为O(N)。

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

#include
#include
using namespace std;
int main()
{
	string str1="abcdefghij", str2 = "xyz";
	str1.insert(3, str2);//在str[3]处插入xyz.
	cout << str1<< endl;
	return 0;
}

C++中 string 使用详细说明_第5张图片

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

#include
#include
using namespace std;
int main()
{
	string str1="abcdefghij", str2 = "xyz";
	str1.insert(str1.begin()+3,str2.begin(),str2.end());//在str[3]处插入xyz.
	cout << str1<< endl;
	return 0;
}

C++中 string 使用详细说明_第6张图片

 

(5)erase()

1. 删除单个元素。

str.erase(it) 用于删除单个元素,it 为需要删除的元素的迭代器。时间复杂度为 O(N)。

#include
#include
using namespace std;
int main()
{
	string str1="abcdefghij";
	str1.erase(str1.begin()+4);
	cout << str1<< endl;
	return 0;
}

C++中 string 使用详细说明_第7张图片

 

2.  删除一个区间内的所有元素有两种方法:

(1)str.erase(first,last) 即删除 [first,last) 内的所有元素。其中 first 为所需要删除区间的起始迭代器,而 last 则为所需要删除区间的末尾迭代器的下一个地址。时间复杂度为 O(N)。

#include
#include
using namespace std;
int main()
{
	string str1="abcdefghij";
	str1.erase(str1.begin()+2, str1.begin() + 6);
	cout << str1<< endl;
	return 0;
}

C++中 string 使用详细说明_第8张图片

(2)st.erase(pos,length)  ,其中 pos 为需要开始删除的起始位置,length 为删除的字符个数。时间复杂度为 O(N)。

#include
#include
using namespace std;
int main()
{
	string str1="abcdefghij";
	str1.erase(2, 4);
	cout << str1<< endl;
	return 0;
}

C++中 string 使用详细说明_第9张图片

 

(6)clear()

clear() 用以清空 string 中的数据,时间复杂度一般为 O(1)。

str.clear()

(7)substr()

substr(pos,len)返回从 pos 号位开始、长度为 len 的子串,时间复杂度为 O(len)。

(8)string::npos

string::npos 是一个常数,其本身的值为 -1,但由于是 unsigned_int 类型,因此实际上也可以认为是 unsigned_int 类型的最大值。string::npos 用以作为 find 函数失配时的返回值。例如在下面的实例中可以认为 string::npos 等于 -1 或者 4294967295.

#include
#include
using namespace std;
int main()
{
	if (string::npos==-1)
	{
		cout << "-1 is true" << endl;
	}
	if (string::npos == 4294967295)
	{
		cout << "4294967295 is also true" << endl;
	}
	return 0;
}

C++中 string 使用详细说明_第10张图片

(9)find()

str.find(str2) ,当 str2 是 str 的子串时,返回其在 str 中第一次出现的位置;如果 str2 不是 str 的子串,那么返回 string::npos.

str.find(str2,pos),从 str 的 pos 号位开始匹配 str2,返回值与上相同。

时间复杂度为 O(nm),其中 n 和 m 分别为 str1 和 str2 的长度。

(10)replace()

str.replace(pos,len,str2) 把 str 从 pos 号位开始、长度为 len 的子串替换为 str2.

str.replace(it1,it2,str2) 把 str 的迭代器 [it1,it2)范围的子串替换为 str2.

时间复杂度为 O(str.length())

 

 

你可能感兴趣的:(C++语法)