0
点赞
收藏
分享

微信扫一扫

C++字符串(string/to_string/append/substr/length/find/rfind/replace/stoi转数字转int)


之前大概的说了一下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


举报

相关推荐

0 条评论