相等性运算符== !=字符串长度所包含字符全部同
关系性运算
< <= > >=
把string对象和字符字面值及字符字面值混合在一条语句中使用,须确保每个加法运算符(+)的两侧的运算对象至少有一个是string 不能把字面值直接相加 编译器无法做到两个字面值的直接相加运算 C++中字符串字面值并不是标准库类型string对象,字符串字面值与string是不同类型 #include <iostream> using namespace std; //行读取 int main(int argc,const char *argv[]) { string line; while(getline(cin,line)) { cout << line << endl; } } //单词 int main() { string word; while(cin >> word) { cout << word << endl; } } //输出string.size > 20 的行 int main() { string line; while(getline(cin,line)) { if(line.size() > 20) { cout << line << endl; } } } //pass输入的空行 int main() { string line; while(getline(cin,line)) { if(!line.empty()) { cout << line << endl; } } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | string类的输入运算符>> 输出运算符 处理string对象中字符 检查string对象是否包含Space,string对象中字母改成小写,查看特定字符是否出现 cctype头文件中,定义了一组标准函数 isalnum (c) litter number alphanumric 字母数字True isalphanumeric isalnum isalpha (c) 参数 iscntrl ()控制字符 isdigit (c) 数字 isgraph () #include <iostream> using namespace std; int main( int argc, const char *argv[]) { char c; //Prompt Input# cout << "[Prompt input#] " ; while (cin >> c) { if ( isupper (c)) { cout << "upper char c = " << c << endl; cout << "convert isupper to is lower: " << char ( tolower (c)) << endl; } else { cout << "lower char c = " << c << endl; cout << "convert to is upper: " << char ( toupper (c)) << endl; } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 | 处理string对象每个字符,使用基于范围的 for for (range for ); 遍历给定序列的每个元素并对序列每个值执行操作 for (declaration:expression) statement; 基于范围的 for 对string对象每个字符操作 语句遍历给定序列每个元素并对序列每个值执行操作 for (declaration:expression) expression对象表示序列 declaration部分负责定义变量 declaration部分负责定义变量 变量被用于访问序列中基础元素,每次迭代,declaration部分变量被初始化w欸expression部分的下一个元素 string对象表示字符序列,string对象作为范围 for 语句expression 可以使用范围 for 语句把string对象字符每行一个输出 |
declaration部分负责定义一个变量,变量用于访问序列基础元素 每次迭代 declaration部分的变量会被初始化为expression部分的下一个元素 使用范围for语句改变字符串中的字符 改变string对象中字符,把循环变量定义成引用 所谓引用只是给定对象的一个别名 使用引用作为循环控制变量 ,变量实际被依次绑定到序列的每个元素,使用引用即能改变绑定字符 访问string对象中单个字符 使用下标迭代器 下标运算符[] 接收的参数string::size_type类型的值 参数表示要访问的字符位置 String对象的下标 >= 0 <string.size() 使用下标访问空String引发问题 while(!string.empty()) { cout << string[0] << endl; } 在访问指定字符之前,检查s是否为空 只要对string对象使用下标 都有确认那个位置上确实有值 只要字符串不是常量,就能为下标运算符返回的字符赋值 string s("some string") if (!s.empty()) //确保string { s[0] = toupper(s[0]);为s的第一个字符赋值 }
提供的是初始化元素值的列表,只能把初始值都放在花括号进行列表初始化,不能放在圆括号 创建指定数量的元素 用vector对象容纳的元素数量和所有元素的统一初始值来初始化vector对象 用vector对象容纳的元素数量和所有元素的统一初始值来初始化vector对象 vector<int> ivec(10,-1);个数 value vector<> intVector(count,RealValue); vector<string> stringVector(10,"hi!"); 值初始化 只提供vector对象容纳的元素数量而不用初始值,库会创建初始化值初始值由vector对象中元素的类型决定; vector<int> ivec(10); //10个元素,每个都初始化为0 vector<string> svec(10); //10个元素 每个都是空string对象; 初始值,元素数量 用一个整数来初始化vector<int>,整数的函数可能是vector对象的容量 列表初始值还是元素数量 vector<int> v1(10); //v1有10个元素,每个的值都是0 vector<int> v2{10}; //v2有1个元素,元素的值是10; vector<int> v3(10,1); //v3有10个元素,每个元素值都是1 vector<int> v4{10,1}; //v4有2个元素,值分别是10和1; 如果用的是圆括号,可以说提供的值是用来构造(construct)vector对象,元素的值可有可无;说明了vector对象的容量 对象容量和元素的初始值 元素的类型一定一样,多个vector的元素的值可以一样,也可能不一样 值得注意: vector对象有size方法,用于获取对象的元素个数 vector对象的每个元素 都有一个索引,所以用于获取对于对象的值; vector<int> v1(10); //cout << v1.size() << endl; for(int i = 0;i < v1.size();i++) { std::cout <<v1[i] << std::endl; }
初始化使用花括号-在string是值,列表初始化一个含有string对象的vector 应该提供能赋予给String对象的初始值,此时不难区分到底是要列表初始化vector对象的元素还是用给定的容量值来构造vector对象; vector<string> v5{"h1"}; //列表初始化,v5有一个元素,值为 vector<string> v6("hi") 不能使用字符串字面值构建vector对象; vector<string> v7{10}; 花括号里面的值需要元素类型一致 不能用int初始化string对象 v7 v8提供的值不能作为元素的初始化值确认无法执行列表初始化后,编译器会尝试用默认值初始化vector; 需要注意两点 初始化元素值 一定用{}或是用()构造 初始化值类型一定要与元素类型一致; 向vector对象中添加元素 对vector对象 直接初始化适用于 初始值已知且数量较少 初始值是另外一个 向vector对象中添加元素 好的处理方法先创建空vector,在运行时利用vector成员函数push_back向其中添加元素 push_back负责把一个值当成vector对象的尾元素压到pushvector对象的尾端(back)
控制变量定义成引用类型 string *p2 = &nums[0]; p2 = &nums[0]; p2存储的是对象的地址,*p2 是解除引用,获取对象的值; 大多数表达式,使用数组类型的对象其实是使用一个指向该数组首元素的指针 一些情况下数组的操作实际是指针的操作 首先定义了两个名为pbeg和pend的整数据 constexpr size_t sz = 5; int arr[sz] = {1,2,3}; int *ip = arr &arr[0] int *ip2 = ip + 4; 传入此类函数的指针必须指向以空字符作为结束的数组 传入此类函数的指针必须指向以空字符作为结束的数组 char ca[] = {'c','+','+'}; //不以空字符结束
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
2016-04-27 openStack logo
2016-04-27 /lib/dracut/hooks/shutdown/30-dm-shutdown.sh
2015-04-27 security questions
2015-04-27 类linux系统/proc/sysrq-trigger文件功能作用
2015-04-27 iphone 6s pp助手 越狱
2015-04-27 ubuntu15.04 TLS
2015-04-27 C pointers