string类型的使用
标准库类型,先引入头文件。
#include <string>
1.定义_初始化
#include <string>
#include <iostream>
int main()
{
string s1; //初始化默认s1是一个空字符串
string s2 = s1; //s2是s1的副本,s2只是与s1的值相同,但地址是不一样的
string s3 = "hiya"; //s3是该字符串"hiya"的副本
string s4(10,'c'); //s4的内容是连续10个c
return 0;
}
2.读入的注意事项
不能用scanf()来读入string类型;
可以用printf()来输出string类型。
string s1;
cin >>s1;
printf("%s\n",s1.c_str()); //加.c_str()后缀,返回存储字符串的字符数组的首元素地址
put(s1.c_str()); //与上面的printf()等价
3.string的函数
#.empty() //判断string是否为空,是——>返回1;不是——>返回0;
#.size() //时间复杂度O(1),因为提前存好长度了;strlen()的时间复杂度为O(n),是循环计算的结果
int main()
{
string s1, s2 = "abc";
cout << s1.empty() << endl;
cout << s2.empty() << endl;
cout << s2.size() << endl;
return 0;
}
4.string的比较
支持 >, <, >=, <=, ==, !=等所有比较操作,按字典序进行比较。
相较于字符数组构建的字符串(ta们只能用strcmp()来比较),string课直接当变量来比大小
5.string的计算(只有加法,拼接)
5.1 2个string类型的相加
string s1 = "hello, "", s2 = "world\n";
string s3 = s1 + s2; // s3的内容是 hello, world\n
s1 += s2; // s1 = s1 + s2
5.2 字面值和1个string类型的相加
做加法运算时,字面值和字符都会被转化成string对象,因此直接相加就是将这些字面值串联起来:
string s1 = "hello", s2 = "world"; // 在s1和s2中都没有标点符号
string s3 = s1 + ", " + s2 + '\n';
//当把string对象和字符字面值及字符串字面值混在一条语句中使用时,必须确保每个加法运算符的两侧的运算对象至少有一个是string:
string s4 = s1 + ", "; // 正确:把一个string对象和有一个字面值相加
string s5 = "hello" + ", "; // 错误:两个运算对象都不是string
string s6 = s1 + ", " + "world"; // 正确,每个加法运算都有一个运算符是string
string s7 = "hello" + ", " + s2; // 错误:不能把字面值直接相加,运算是从左到右进行的
6.处理string中的字符
6.1把string当做字符数组
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s = "hello world";
for (int i = 0; i < s.size(); i ++ )
cout << s[i] << endl;
return 0;
}
6.2用for()增强循环!!!
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s = "hello world";
for (char c: s) cout << c << endl; //for()括号里:char代表s里的每一个组成元素的类型,c是新创建的变量,用来作为s中变量的副本,char也可以用auto替换,让编译器去猜c是什么类型
for (char& c: s) c = 'a'; //&c代表c不是副本,而是和s一样的地址
cout << s << endl;
return 0;
}