本文从大纲要求出发,系统梳理C++中字符数组与string类的异同、常用函数接口、字符串匹配算法及应用技巧,结合典型例题剖析,帮助选手构建完整的字符串知识体系,为冲刺NOI提供有力支撑。
猜你喜欢:各省市2026年NOI省队名单汇总
福利资料:为协助信息学竞赛生高效备考,特整理《2014-2025年信息学竞赛试题及答案》pdf资料
2026年NOI大纲解读八:C++字符串
一、 知识点概览
根据《全国青少年信息学奥林匹克系列竞赛大纲(2025年修订版)》,2.1.2 C++ 程序设计的第八部分是字符串的处理。在信息学竞赛中,文本处理是输入输出的重要环节,也是模拟题的重灾区。
1. 字符数组(C 风格字符串)
定义:本质上是一个 char 类型的数组,以空字符 \0 作为结尾标记。
操作:需要依赖 头文件中的函数(如 strl
2. string 类(C++ 风格字符串)
定义:C++ 标准库(STL)提供的动态字符串类型,封装在 头文件中。
优势:长度可变、支持直接赋值、支持 + 号拼接、支持字典序比较。在 CSP-J/S 及 NOI 系列竞赛中,强烈推荐优先使用 string 类。
二、 常见考点与易错点分析
字符串看似简单,但在实际读写和处理中,“坑”非常多:
1. 输入中断陷阱(高频易错)
cin 读取:使用 cin >> s; 读取字符串时,遇到空格、回车或制表符就会停止。如果你输入 Hello World,s 中只会存储 Hello。
getline 读取:若要读取包含空格的一整行文本,必须使用 getline(cin, s);。
2. 字符串下标与长度
下标:string 的下标从 0 开始,最后一个字符的下标是 s.size() - 1。
长度:获取长度使用 s.length() 或 s.size()。注意,这两个函数的时间复杂度通常是 ,但 strlen(用于字符数组)是 。
3. 字典序比较
概念:字符串比较大小是按照“字典序”进行的(即 ASCII 码顺序)。例如 "abc" < "abd","apple" < "banana"。
数字陷阱:字符串 "10" 和 "2" 比较,结果是 "10" < "2"(因为首字符 '1' < '2')。处理数值大小时需转换为整数或使用高精度算法。
三、 C++ 示例代码:string 核心操作
以下代码展示了 string 的读入(含空格)、拼接、查找以及遍历操作。

四、 典型真题解析
例题 1:输入特性(模拟初赛真题)

【解答】cin 以空白字符(空格、换行、Tab)作为输入结束的分隔符。因此遇到空格时读取停止,缓冲区中剩余 World。
答案:B
例题 2:字典序逻辑

【解答】
A:比较首字符 '1' 和 '2','1' 小于 '2',结果为 false。
B:"apple" 包含 "app" 且更长,故 "apple" > "app",结果为 false。
C:大小写敏感,ASCII 码不相等,结果为 false。
D:首字符 'b' (98) 大于 'a' (97),结果为 true。
答案:D
五、 结构化梳理:知识思维导图

推荐阅读:




























