之前大概的说了一下string这个类,在这篇文章中,本章继续学习string,这个类是c++独有的,在c语言中无法使用
#include <string>// 导入string的头文件
int main()
{
// 定义一个叫name的变量,里面的值是二抱三抱
std::string name{"二抱三抱"};
std::cout << name << std::endl;
}
string类不需要考虑长度等一些问题,而使用char数组则必须考虑
std::string name;
printf("请输入点东西:");
std::cin >> name;// 随便输入什么都可以
std::cout << "你输入的是:"<< name << std::endl;
string类的字符串截取
// 其中2表示2个字节,因为中文一个字占用2个字节,所以只会打印出“表”
std::string name1{"表妹",2};
std::cout << name1 << std::endl;
// 此处会打印出"12"
std::string name2{ "123",2 };
std::cout << name2 << std::endl;
// 从第6个字节开始截取10个长度的内存(注意是从0开始而不是1)
// 下面这句话会打印出"喜欢二抱三抱",注意中文占2个字节
std::string name1{"真的好喜欢二抱三抱",6,10};
std::cout << name1 << std::endl;
// 打印出520
std::string name2{ "125206",2,3 };
std::cout << name2 << std::endl;
std::string a{"mayinshuang"};
// 从第2个字节开始截取,截取3个字节长度
std::cout << a.substr(2,3) << std::endl;//yin
// 从第2个字节开始截取,一直截取到最后
std::cout << a.substr(2) << std::endl;//yinshuang
string类的字符复制
// 复制5个字母s给value
std::string value(5,'s');
// 打印出"sssss"
std::cout << value << std::endl;
多个字符串连接,注意是多个字符串,字符串和其他类型是不可以直接连接的
std::string str;
// 下面这行代码会报错,string类拼接的时候
// 两个字符串相加,必须有一个是string类型的变量才可以,而下面三个都是常量
str = "真的" + "好喜欢" + "二抱三抱";
std::string str;
std::string pre{"真的"};
// 此处第一个值pre是个变量,所以pre+"好喜欢"=string类型
// 接下来再加上"二抱三抱",这样才可以
str = pre + "好喜欢" + "二抱三抱";
std::cout << str << std::endl;
字符串与数字类型连接,这个数字不只是int整数,double等其他的数字也可以
std::string a;
std::string b{"二抱三抱"};
int c{521};
a = b + std::to_string(c);
std::cout << a << std::endl;
下面是个字符串连接反人类的设计,我从来没想过c++竟然有这种写法
std::string a;
a = "喜欢""二抱三抱";
std::cout << a << std::endl;
append函数连接字符串
append方法还有重载参数,用来截取字符串,代码参考上面截取字符串的即可
std::string d{"ma yin "};
d.append("shuang");
std::cout << d << std::endl;
length方法获取字符串长度(对中文支持有问题)
std::string a{"mayinshuang"};
std::cout << a.length() << std::endl;//打印出11
string的本质也是char类型数组,所以它可以如下写
std::string a{"mayinshuang"};
std::cout << a[0] << std::endl;
两个字符串比较
std::string a{"shuang"};
std::string b{"shuang" };
std::cout << std::boolalpha<< (a == b) << std::endl;
也可以使用compare比较,但是这返回的是int类型
std::string a{"a"};
// a>b返回1,a=b返回0,a<b返回-1
std::cout << a.compare("b") << std::endl;
// 从第0个开始,比较2个字节长度
std::cout << a.compare(0,2,"ab") << std::endl;
find函数,查找字符串,等同于java的indexOf
还有个函数叫rfind,倒着搜索
std::string a{"mayinshuang"};
std::cout << a.find("yin") << std::endl;
// find函数如果没找到,则返回std::string::npos
if (a.find("eee") == std::string::npos) {
std::cout << "没找到" << std::endl;
}
else {
std::cout << "找到了" << std::endl;
}
replace函数用于替换
std::string a{"abcd"};
// 从第1个字节开始,要替换2个字节长度,替换后的内容是ys
std::string b=a.replace(1,2,"ys");
// 打印出"aysd"
std::cout << b << std::endl;
erase函数用于删除字符串里的内容
std::string a{"abcd"};
// 从索引1开始,要删除2个字节长度
std::string b = a.erase(1, 2);
// 打印出"ad"
std::cout << b << std::endl;
stoXXX字符串转数字(int/double/等等)
std::string a{"123"};
// stoi中的i表示int,还有sto其他
int b = std::stoi(a);
std::cout << b << std::endl;
stringstream字符串的流输入(相当于字符串连接)
#include <string>
#include <sstream>//这里引用sstream
int main()
{
std::stringstream ss;
ss << "欺负" << "抱抱" << std::hex << 15;
std::string b = ss.str();
std::cout << b << std::endl;
}
记录14.1-14.5