字符串string对象
字符串、向量和数组(1)
标准库类型string
string表示可变长字符序列,使用其必须先包含string头文件。string定义在std命名空间。
定义和初始化string对象
string s1; //默认初始化,空串;
string s2 = s1; //s2是s1的副本;
string s5(s2);
string s3 = "hiya"; //是字符串字面量的副本;
string s6("hiya");
string s4(10, 'c'); //s4="cccccccccc";
直接初始化和拷贝初始化
使用=的初始化变量是执行的拷贝初始化,反之不用等号的初始化就是直接初始化。
string s5 = "hiya"; //拷贝初始化;
string s6("hiya"); //直接初始化
string s7(10, 'c'); //直接初始化;
string对象上的操作
读写string对象
string s;
cin>>s;
cout<<s<<endl;
string对象会自动忽略开头的空白(空格、换行、制表符等)并从第一个真正的字符开始读起,直到遇到下一个空白为止:
例如:s为" Hello world ",那么s实际为Hello;
string对象此类操作也是返回运算符左侧的运算对象作为其结果:
string s1, s2;
cin>>s1>>s2;
cout<<s1<<s2<<endl;
读取未知数量的string对象;
int main(){
string word;
while(cin>>word) {
cout<<word<<endl;
}
return 0;
}
一旦输入遇到文件结束符或非法输入循环自然就结束了。
使用getline读取一整行
getline函数参数一个是输入流,一个是string对象,函数会从输入流中读取内容,直至遇到换行符(换行符也会被读取进来),然后把所读的内容存入string中(换行符不会存入)。因此getline()只要一遇到换行符就结束读取操作并返回结果。
int main()
{
string line;
while(getline(cin, line)) {
cout<<line<<endl;
}
return 0;
}
string::size_type
对于size()接口而言,返回int之流都是合情合理的,但是string返回的却是string::size_type类型,这个类型是屏蔽了机器类型的,其是一个无符号类型的值(其实很好懂,无非就是int,long,ll之流跟随机器特性变化)。
比较string对象
==, !=检查两个对象相等或不想等,<, <=, >, >=分别看两个string对象的字典序大小;
两个string对象相加
string s1 = "hello", s2 = "world\n";
string s3 = s1 + s2;
s1 += s2;
string对象和字面值相加
必须+两侧至少有一个string对象,同时需要记住字符串字面量和string对象不是同一类型,前者是为了和C兼容及历史原因保留下来。
string s1 = "hello";
string s2 = s1 + ','; //OK
string s3 = '!' + s1; //OK
string s4 = "hello" + ','; //error
处理string对象中的字符
isalnum(c); //当c是字母或数字为真;
isalpha(c); //当c是字母时为真;
isdigit(c); //数字为真
iscntrl(c); //控制符为真;
isgraph(c); //不是空格但是可打印为真;
islower(c); //小写字母时为真;
isprint(c); //当为可打印时为真;
ispunct(c); //当c是标点符号时为真;
isspace(c); //为空格为真;
isupper(c); //大写字母时为真;
isxdigit(c); //十六进制数字为真;
tolower(c); //输出字母对应的小写形式;
toupper(c); //输出字母的大写形式;
遍历string对象
1.for-base形式
for(int i = 0; i < s1.size();i++)
//do-something;
for (auto c : s1)
//do-something;
上面都是string基本特性,一个是为了梳理,一个是避免有没有新特性遗漏;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】