【STL】string类 (下)

目录

1,insert

2,erase

3,find

4,replace

5,rfind

6,substr

7,find_first_of

8,find_first_not_of

9,find_last_of

10,operator+

11,getline


【STL】string类 (下)_第1张图片

1,insert

【STL】string类 (下)_第2张图片

在 pos 位置之前插入字符串

#include
#include
using namespace std;

int main()
{
	string s1("hello world");
	s1.insert(0, "xx");
	cout << s1 << endl;

	s1.insert(0,2,'y');
	cout << s1 << endl;

	s1.insert(s1.begin(),'z');
	cout << s1 << endl;

	string s2("iiiiiiiiii");
	s1.insert(0,s2, 5);
	cout << s1 << endl;
	return 0;
}

【STL】string类 (下)_第3张图片

2,erase

【STL】string类 (下)_第4张图片

擦除范围字符串

int main()
{
	string s1("hello world");
	s1.erase(5, 4);
	cout << s1 << endl;

	s1.erase(1);
	cout << s1 << endl;

	return 0;
}

【STL】string类 (下)_第5张图片

3,find

【STL】string类 (下)_第6张图片

int main()
{
	string s1("hello world");

	size_t pos = s1.find('l',0);
	cout << s1[pos] << endl;

	pos = s1.find("ll", 1);
	cout << pos << endl;

	return 0;
}

【STL】string类 (下)_第7张图片

4,replace

【STL】string类 (下)_第8张图片

从 pos 位置开始,用 n 个字符替换;

int main()
{
	string s1("hello world");

	s1.replace(0, 2, "xx");
	cout << s1 << endl;

	s1.replace(0, 5,"yyy");
	cout << s1 << endl;

	return 0;
}

【STL】string类 (下)_第9张图片

上述可以看到,第一个替换从下标 0 开始用两个字符也就是 ” he “ 替换 “ xx ” ;

第二个替换是从下标 0 开始用5个字符也就是 “ hello ” 替换 “ yyy ”;

给大家写一个替换字符的题目

将字符串中的空格都替换成其他字符串

int main()
{
	string s1("hello world hello bit");

	size_t pos = s1.find(" ", 0);
	while (pos != string::npos)
	{
		s1.replace(pos, 1, "%20");
		pos = s1.find(" ", pos + 3);
	}
	cout << s1 << endl;
	
	return 0;
}

【STL】string类 (下)_第10张图片

查找字符然后进行替换,然后在查找再替换直到查找不到为止退出;

5,rfind

【STL】string类 (下)_第11张图片

从字符串pos位置开始往前找字符c,返回该字符在字符串中的位置

int main()
{
	string s1("hello world");

	size_t pos = s1.rfind('l',3);
	cout << pos << endl;

	pos = s1.rfind('l', 10);
	cout << pos << endl;

	pos = s1.rfind('o');
	cout << pos << endl;

	pos = s1.find("l");
	cout << pos << endl;
	pos = s1.rfind("l");
	cout << pos << endl;

	return 0;
}

【STL】string类 (下)_第12张图片

6,substr

【STL】string类 (下)_第13张图片

在 str 中从 pos 位置开始,截取 n 个字符,然后将其返回

int main()
{
	string s1("hello world");

	string s2=s1.substr(2, 3);
	cout << s2 << endl;

	string s3 = s1.substr(0);
	cout << s3 << endl;

	return 0;
}

【STL】string类 (下)_第14张图片

我们再写一个查找后缀的程序;

int main()
{
	string s1("test.cpp");
	string s2("code.jbp");

	size_t pos = s1.rfind('.');
	if(pos != string::npos)
	{
		string buff = s1.substr(pos);
		cout << buff << endl;
	}

	pos = s2.rfind('.');
	if(pos != string::npos)
	{
		string buff = s2.substr(pos);
		cout << buff << endl;
	}

	return 0;
}

【STL】string类 (下)_第15张图片

我们再写一个分离字符串的小程序

int main()
{
	string str("https://legacy.cplusplus.com/reference/string/string/substr/");
	size_t pos = str.find(':');
	string buff = str.substr(0, pos+1);
	cout << buff << endl;

	size_t pos1 = str.find('/',pos+3);
	buff = str.substr(pos + 1, pos1-pos);
	cout << buff << endl;

	size_t pos2 = str.rfind('/');
	buff = str.substr(pos1 + 1, pos2-pos1);
	cout << buff << endl;

	return 0;
}

【STL】string类 (下)_第16张图片

7,find_first_of

【STL】string类 (下)_第17张图片

直接看代码兄弟们

int main()
{
	string str("Please, replace the vowels in this sentence by asterisks.");
	size_t pos = str.find_first_of("abc");
	while (pos != string::npos)
	{
		str.replace(pos, 1,"*");
		pos = str.find_first_of("abc",pos);
	}
	cout << str << endl;

	return 0;
}

【STL】string类 (下)_第18张图片

8,find_first_not_of

与 find_first_of 功能相反,返回不属于字符串的下标

int main()
{
	string str("Please, replace the vowels in this sentence by asterisks.");
	size_t pos = str.find_first_not_of("abc");
	while (pos != string::npos)
	{
		str.replace(pos, 1,"*");
		pos = str.find_first_not_of("abc",pos+1);
	}
	cout << str << endl;

	return 0;
}

【STL】string类 (下)_第19张图片

9,find_last_of

跟 find_first_of 类似,只不过 find_last_of 是从后往前找的;

来个例子:

void SplitFilename(const std::string& str)
{
	std::cout << "Splitting: " << str << '\n';
	std::size_t found = str.find_last_of("/\\");
	std::cout << " path: " << str.substr(0, found) << '\n';
	std::cout << " file: " << str.substr(found + 1) << '\n';
}

int main()
{
	std::string str1("/usr/bin/man");
	std::string str2("c:\\windows\\winhelp.exe");

	SplitFilename(str1);
	SplitFilename(str2);

	return 0;
}

【STL】string类 (下)_第20张图片

10,operator+

【STL】string类 (下)_第21张图片

int main()
{
	string s1("hello world");
	string s2("abcdefg");

	string s3 = s1 + s2;
	cout << s3 << endl;

	s1 = s2 + "666";
	cout << s1 << endl;

	s2 = "999" + s2;
	cout << s2 << endl;
	return 0;
}

【STL】string类 (下)_第22张图片

11,getline

【STL】string类 (下)_第23张图片

我们正常的输入是使用 cin

int main()
{
	string s1;
	//我们输入 hello world
	cin >> s1;
	cout << s1 << endl;
	
	return 0;
}

【STL】string类 (下)_第24张图片

但是 cin 遇到空格就会停下来,所以我们引入了 getline ;

int main()
{
	string s1;
	getline(cin, s1);
	cout << s1 << endl;
	cout << endl;

	//我们输入 hello world
	cin >> s1;
	cout << s1 << endl;
	
	return 0;
}

【STL】string类 (下)_第25张图片

【STL】string类 (下)_第26张图片

你可能感兴趣的:(C++,c++,算法,开发语言,运维,服务器,后端)