C++中string头文件的一些库函数的的用法(作者自己给自己看的,想需要详细的知识别来我这里)

本文介绍了C++中字符串处理的几个关键函数,如getline用于读取空格,find和substr用于查找子串,replace用于替换字符,以及string类的compare方法进行比较,同时展示了auto关键字在遍历字符串的不同用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

*****首先是关于字符串吃空格的问题,不管你的字符串需不需要空格,getline可以解决一切,直接上示例,我在VS中测试的,需要特定的<sstream>头文件。

​
#include <cstdio>
#include <string>
#include <iostream>
#include <sstream>//Vs中使用getline必须需要的头文件
using namespace std;
int main()
{
	string s;//**string定义的时候可以不考虑[],string会根据长度自动调整!
	getline(cin,s);
	int sz = s.size();//**获取字符串长度
	int arr[] = { 1,2,4,5 };
	int q = sizeof(arr)/sizeof(arr[0]); //**获取非字符串数组长度
	cout << sz<<q;
	string o="lll";
	string k = s + o;//**c++中可以用字符串加字符串,加几个都可以
	cout<<k;
	for (int i = 0; s[i]; ++i)
	{
		cout << s[i] << '\n';
	}
	cout << sz;
	return 0;
}

​

*****string头文件下find函数的用法,也包括substr的用法示例。

****string中find库函数的用法,接下来的示例是把字符串中所有的目标字符打印出来
//思想:每找到一个目标字母,下一次就只找目标字母+1及以后的字符串,所以用到substr定义子串


#include <string>
#include <iostream>
using namespace std;
int main()
{
	int fin = 0;
	string s="Hello,World";
	string zis;//每次找完到后,下一个新的子串
	zis = s;//起初子串等于母串
	int sz = s.size();
	int mark = 0;//用来表示找到的字母在母串中的下标
	while (1)
	{
		fin = zis.find("o");//子串中目标字母的下标
		mark+=zis.find("o");//母串中目标字母的下标
		if (fin == -1)
			break;
		else
		zis = zis.substr (fin + 1, sz - fin);//fin+1是提取母串起始位置,sz-fin是提取的长度
		cout << mark<<"\t";

	}
	return 0;
}

*******replace涉及字符串的替换
 

#include <string.h>
#include <iostream>
using namespace std;
int main()
{
	string s = { "Hello,World" };
	s.replace(6,1, "wsa");//6是起始位置即为W,后面接替换长度,但是目测填什么都可以,然后是需要替换的字符串,可以随便打,打100个字符都可以,目前Vs中测试没问题。
	cout << s;
	return 0;
}

*****字符串的比较

#include <string.h>
#include <iostream>
using namespace std;
int main()
{
	string s1 = { "Hello,World" };
	string s2 = { "awddxsa" };
	int result = s1.compare(s2);//核心语句
	cout << result<<"\n";
	if (result < 0)
		cout << "s1与s2的第一个相异字母是s1<s2";
	else if (result == 0)
		cout << "s1与s2完全一致";
	else
		cout << "s1与s2第一个相异的字母是s1>s2";

}

****用auto遍历字符串(auto:后面的变量可以是任意的,可以是未定义的,都是从0开始是往后遍历的变量)

#include <string.h>
#include <iostream>
using namespace std;
int main()
{
	string s = { "Hello"};
	int sz = s.size();
	cout << "字符串长度为:" << sz<<"\n";
	for (int p = 0; p < sz; ++p)
	{
		cout << s[p]<<"\n";
	}
	for (auto i : s)//此处i复制了s[i],但不是s[i]
	{
		cout << i;//看似输出i,实际是s[i]
		i = 'a'; //对i即s[i]改变但是无法改变是s[i]仅仅是赋值而已
	}
	cout << "\n";
	cout << s << "\n";
	for (auto &i : s)//&i就是s[i]
	{
		cout << i;
		i = 'a';//此处会改变s[i]
	}
	cout << s << "\n";
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值