CSP-J 入门级 · CSP 2025 入门级第一轮 第 9 题

选择题 · 答案 B · 考点:运算符与表达式

← 整套速查表 CSP-J 入门级 全部真题

题目

下列关于 C++ string 类的说法,正确的是?

答案:B

考点

运算符与表达式

解题思维

直接代入选项逐一验证,抓住 string 动态增长、运算符重载、length 与 size 等价、末尾\0 不计入长度这几个核心点,就能快速锁定 B。

常见错误

很多学生容易把 C++ string 和 C 语言 char 数组混为一谈,以为 string 末尾必须存\0 且计入长度,或者误以为 length 和 size 不一样,甚至觉得 string 长度固定不能变,这些都是把 C 风格字符串的习惯套用到 C++ string 上导致的错误。

详细解析(节选)

这道题考查的是 C++ string 类的基本特性,包括动态长度管理、运算符重载、length() 与 size() 的关系,以及末尾\0 的处理方式。

命题人挖坑的意图很明显:利用学生熟悉 C 语言 char 数组的经验,让他们误以为 string 也是以\0 结尾且\0 计入长度,或者认为 string 长度固定、不能用 + 连接。事实上,string 是动态容器,创建后长度随时可改(push_back、+=、append 等);它重载了 + 运算符,所以 string+string、string+char、string+const char* 都能直接编译通过,返回一个新的 string 对象。

关于 length() 和 size(),两者完全等价,都返回当前字符串中字符的个数,不包括末尾的\0。C++11 标准规定,string 的 c_str() 返回的 C 风格字符串末尾会补一个\0,但这只是为了兼容 C 接口,长度统计时绝不把它算进去,所以 D 选项说\0 计入 length() 是错的。

思考时可以先看 A:string 长度可变,A 错;再看 B:确实支持 +,B 对;C 说 length 和 size 可能不同,其实一样,C 错;D 说\0 计入长度,实际不计入,D 错。这样逐项排除就能稳稳选 B。

考频方面,运算符与表达式在题库中一共考过 261 题,覆盖 9 个级别,从 2007 年到 2026 年逐年分布,其中 2025 年有 61 题,2024 年 41 题,2023 年 91 题,整体呈上升趋势,说明这类基础概念题在近年越来越受重视。分赛事来看,GESP 一级、二级、三级、四级、五级以及 CSP 入门级、NOIP 普及组初赛、CSP 提高级、NOIP 提高组初赛都有涉及,尤其是 GESP 一级 72 题、二级 70 题、三级 47 题、四级 37 题,占比很高,说明入门阶段非常强调 string 这类基本类的掌握。

基于这个趋势,未来命题很可能继续从 string 的基本操作入手,比如结合输入输出、字符串查找、大小写转换等场景,考察学生是否能灵活运用 +=、find、substr 等函数,或者在混合类型运算中正确判断结果类型。也可能出现更隐蔽的坑,比如考察 string 与 char 数组互转时的长度差异,或者在 C++11 之后对\0 处理的理解是否到位。

总之,记住 string 是动态的、支持 + 连接、length 等于 size、末尾\0 不计入长度,这几条就能应付绝大多数相关题目。

同考点真题

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断