【STL】string类 (下)

目录


1,insert

在 pos 位置之前插入字符串

#include<iostream>
#include<string>
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;
}

2,erase

擦除范围字符串

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

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

	return 0;
}

3,find

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;
}

4,replace

从 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;
}

上述可以看到,第一个替换从下标 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;
}

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

5,rfind

从字符串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;
}

6,substr

在 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;
}

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

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;
}

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

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;
}

7,find_first_of

直接看代码兄弟们

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;
}

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;
}

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;
}

10,operator+

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;
}

11,getline

我们正常的输入是使用 cin

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

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

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

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

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
心中带点小风骚的头像心中带点小风骚普通用户
上一篇 2023年12月7日
下一篇 2023年12月7日

相关推荐