一、与string有关数组的初始化
#include<string>
#include<iostream>
int main()
{
std::string str1;//声明一个空字符串
std::string str2 = "hello,world!";//使用字符串字面量初始化字符串
std::string str3 = str2;//使用另一个std::string对象来初始化字符串
std::string str4 = str2.substr(0, 5);//部分初始化字符串,substr表示字串,其中(起始位置,长度)
const char* charArry = "hello";
std::string str5(charArry);//使用字符数组初始化字符串
std::string str6(5, 'A');//用重复的字符初始化字符串,其中(个数,字符)
std::cout << str1 << '\n';
std::cout << str2 << '\n';
std::cout << str3 << '\n';
std::cout << str4 << '\n';
std::cout << str5 << '\n';
std::cout << str6 << '\n';
return 0;
}
上面是string使用的一些例子,我们在使用string时是需要包含“string”的头文件的,并且我们初始化字符串时除了可以使用上面的方法我们也可以使用cin>>str的,不过cin在碰到空格的时候会停止,如果我们想要输入一行字符串,我们就需要getline(cin,str)。
上面我们很多语句都使用了std::,如果不想这么麻烦,我们就需要使用“using namespace std;”来使用std的空间。这个需要加在主函数外面,比如:
#include<string>
#include<iostream>
using namespace std;
int main()
{
std::string str;
getline(cin, str);
cout << str;
return 0;
}
二、string的一些基本操作
int main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
char buf[100];
scanf_s("%s", buf);
std::string str(buf);
printf("%s", str.c_str());
return 0;
}
在C++中,std::string提供了一个成员函数c_str()用于返回一个指向以空字符结尾的C风格字符串(即const char*类型),在进行printf输出是需要将string转化为C风格的字符串进行输出。
1.获取字符串长度:
int main()
{
string str = "hello,world!";
int length;
length = str.length();//或者可以写成str.size()
cout << length;
return 0;
}
可以通过.length()或者.size()的方式来获取string类型字符串的长度。
2.拼接字符串:
int main()
{
string str1 = "hello";
string str2 = "world";
string result1 = str1 +", "+ str2;
string result2 = str1.append(", ").append(str2);
cout << result1<<'\n';
cout << result2;
return 0;
}
可以通过“+”或者“append”来进行拼接,不过append之后需要使用();
3.字符串的查找:
int main()
{
string str = "hello,world!";
size_t pos = str.find("world");
if (pos != string::npos)
cout << "found" << '\n';
else
cout << "not found" << '\n';
return 0;
}
通过使用.find可以进行字符串内部的查找。
4.字符串的替换:
int main()
{
string str = "hello, world!";
str.replace(7, 5, "universe");
cout << str;
return 0;
}
使用.replace可以将字符串内进行替换,其中(起始位置,长度,替换的内容)。
5.提取子字符串:
int main()
{
string str = "hello, world!";
string substr = str.substr(7, 5);
cout << substr;
return 0;
}
使用.substr可以进行子字符串的提取,其中(起始位置,长度)。注意长度不要越界。
6.字符串的比较:
int main()
{
string str1 = "aabcc";
string str2 = "abbcc";
int ret = str1.compare(str2);
if (ret == 0)
{
cout << "str1=srr2";
}
else if (ret < 0)
{
cout << "str1<str2";
}
else
cout << "str1>str2";
return 0;
}
通过使用.compare()可以比较两组字符串的大小,相当于前面减后面,小于0就是前面小,大于0就是后面小。
三、遍历string的方法
有两种:
1.循环枚举下标:
int main()
{
string str = "hello, world";
for (int i = 0; i < str.length(); i++)
{
cout << str[i];
}
return 0;
}
2.auto枚举
int main()
{
string str = "hello, world!";
for (auto i : str)
{
cout << i;
i = 'a';//此处的i不会被a修改,因为i是被拷贝出来的,不是引用str的
}
cout << '\n';
for (auto& i : str)
{
cout << i;
i = 'a';//此处的i值会变为a,因为&就是引用了str
}
cout <<'\n'<< str;
return 0;
}
使用auto进行枚举,注意i的变化。