string类

std::string 是在标准库 中提供的一个类

string 可以动态分配空间和许多 STL 容器相同,string 能动态分配空间,这使得我们可以直接使用 std::cin 来输入
string 的加法运算符可以直接拼接两个字符串或一个字符串和一个字符。
string 重载了比较运算符,同样是按字典序比较的,所以我们可以直接调用 std::sort 对若干字符串进行排序。
string支持迭代器,可以使用迭代器来遍历字符串中的字符

string的声明

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
using namespace std;
int main()
{
	string str1;

	string str2 = "Hello world!";

	string str3 = str2;
	//部分字符初始化
	string str4 = str2.substr(0, 5);
	//substr(起始位置,长度)
	//用字符数组初始化字符串
	const char* chararry = "hello";
	string str5(chararry);
	//使用重复的字符初始化
	string str6(5, 'A');

	cout << str1 << endl;
	cout << str2 << endl;
	cout << str3 << endl;
	cout << str4 << endl;
	cout << str5 << endl;
	cout << str6 << endl;
	return 0;
}

运行结果:
在这里插入图片描述

输入字符串

一般使用cin>>string,但是遇到空格或者换行符会停止
所以我们也可以使用getline(cin,s)来读入一行字符串

成员函数

在 C 语言里,也有很多字符串的函数,但是它们的参数都是 char 指针类型的,在C++中string类提供了一个成员函数c_str(),用于返回一个指向以空字符结尾的C风格字符串(const char*),我们在进行printf输出时,需要将string转换成C风格的字符串

int main()
{
	char buf[100];//临时变量,用于输出
	scanf("%s", buf);
	string str(buf);
	printf("str=%s\n", str.c_str());
	return 0;
}

运行结果:
在这里插入图片描述

基本操作

int main()
{
	//获取字符串长度(lengtg.size)
	string s1 = "Hello world";
	string s2 = "nihao";
	int length = s1.length();
	cout << length << endl;
	int size = s1.size();
	cout << size << endl;

	//拼接字符串(+或者append)
	s1 + "!" + s2;
	s1.append("!").append(s2);
	cout << s1 << endl;
	cout << s2 << endl;

	//字符串查找
	string s3 = "Hello C++";
	size_t pos = s3.find("C++");//查找字符串位置
	if (pos != -1)
	{
		cout << "字符串的位置为:" << pos << endl;
	}
	else
	{
		cout << "没找到" << endl;
	}

	//字符串替换
	string s4 = "Hello world";
	s4.replace(7, 5, "Universe");//替换字符串
	//replace(起始位置,长度,替换的字串)

	//提取字符串(substr)
	string s5 = "Hello world";
	string substr = s5.substr(7, 5);//注意长度不要越界

	//字符串比较(compare或者> < ==)
	string str1 = "aaaa";
	string str2 = "bbbb";
	int result = str1.compare(str2);
	if (result == 0)
	{
		cout << "相等" << endl;
	}
	else if (result < 0)
	{
		cout << "str1 < str2" << endl;
	}
	else
	{
		cout << "str1>str2" << endl;
	}
	//一但遇到不相等的字符就确定大小关系
	//aaaa<bbbb    azz<baa  azzzzzz<b    sss==sss

	//插入和删除
	string s = "Hello", t = " World";
	char u = '!';
	s.erase(2);
	cout<<"从字符串 s 的第三位开始删去所有字符后得到的字符串是"<<s<<endl;
	s.insert(2, t);
	cout<<"在字符串 s 的第三位处插入字符串 t 后得到的字符串是"<<s<<endl;
	s.insert(7, 3, u);
	cout<<"在字符串 s 的第八位处连续插入 3 次字符串 u 后得到的字符串是" << endl;

	//数字变字符串
	int n = 521;
	cout << "整数变字符串:" << to_string(n) << endl;

	double d =3.14159;
	cout << "浮点数变字符串:" << to_string(d) << endl;
	
	//字符转数字
	int m = 9;

	char ch;
	ch = m + '0';     //利用数字在ASCII中与0的相对位置

	cout << "转化结果为:" << ch << endl;
	return 0;
}

运行结果:
在这里插入图片描述

遍历string

1.循环枚举下标
2.auto枚举(其中&表示取引用类型,如果对i修改会改变原来的值)
int main()
{
	string s = "Hello";
	for (int i = 0; i < s.length(); ++i)
	{
		cout << s[i];
	}
	cout << endl;
	for (auto i : s)
	{
		cout << i;
		i = 'a';//此处的修改无效,因为这个1是拷贝山来的,而不是引川s的
	}
	cout << endl;
	//此时s="Hello
	for (auto& i : s)
	{
		cout << i;
		i = 'a';//此处修改会改变s的字符值
	}
	cout << endl;
	//此时s ="aaaaa'
	cout << s << '\n';
}

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值