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';
}
运行结果: