GESP 三级 · GESP 202312 C++ 三级 第 3 题

选择题 · 答案 C · 考点:函数

← 整套速查表 GESP 三级 全部真题

题目

下面 C++ 代码执行后不能输出"GESP"的是()。

答案:C

考点

函数

解题思维

别急着看代码,先圈出题目里那句致命的‘不能输出’。这题考的是字符串初始化语法的等价性,以及下标访问的‘零起始’规则。命题人把四个选项摆成两两对比:A、B、D全是构造整串,只有C是切片。拿到题先想:cout<<str是输全串,str[i]是从0开始数,那str[1]到str[4]到底取哪几个字符?

常见错误

最容易栽跟头的就是C选项。很多同学背了‘string str("GESP")',看到C选项里的圆括号就以为和A一模一样,完全忽略了后面那串下标访问。更隐蔽的坑是下标越界:字符串"GESP"长度是4,下标合法范围是0~3。C选项却从str[1]开始,一直写到str[4],那个str[4]根本不存在,输出的是空字符\0。结果屏幕上只蹦出"ESP"加个不可见字符,绝没有"GESP"。另外,花括号初始化str{"GESP"}是C++11的新特性,但功能跟圆括号完全一致,别被新语法吓住。

详细解析(节选)

【考点】字符串初始化语法|下标访问规则|cout输出行为

这道题属于GESP三级“字符串与输入输出”模块的核心内容,命题人专盯“构造语法等价性”和“下标越界”这两个盲区。解题要抓住三件事:一是三种构造写法(圆括号、默认值、花括号)均生成同样字符串;二是cout<<str直接输出整串;三是str[i]访问从0开始,长度4的字符串下标4已越界。

先看A、B、D三个选项。A用构造函数string str("GESP"),B用默认初始化后赋值string str="GESP",D用花括号初始化string str{"GESP"}。这三者在C++中都是合法的,且最终str的内容完全一致,都是"GESP"。cout<<str就会把整个字符串打印出来,所以这三个都能输出"GESP",直接排除。

再看C选项:string str("GESP"); cout<<str[1]<<str[2]<<str[3]<<str[4]<<endl; 这里命题人玩了个巧妙的坑。str[1]取的是第二个字符'E',str[2]是'S',str[3]是'P',但str[4]已经越界了——字符串长度是4,下标最大只能是3,str[4]对应的是空字符\0。所以cout实际输出的是"ESP"加上一个不可见的\0,屏幕上看起来就是"ESP",绝不可能是"GESP"。这就是为什么C是正确答案。

陷阱设计极狡猾:C选项故意用下标1-4,既考0起始又考越界判读;圆括号与花括号语法相似却易被误认为等价;若只背"string str("GESP")"就选C,必掉坑。花括号构造是C++11新增,但功能与圆括号完全一致,此处命题人用此细节增加区分度。若把题干改“能输出含'G'的是”,C即排除;或字符串换成"GESP2024",C输出"ESP2"仍非"GESP"。

【考频与趋势】关联知识点“基础语法”在题库共考过1295题,覆盖11个考试级别(2008-2026);逐年分布:2008年1题、2011年1题、2019年3题、2023年287题、2024年413题、2025年401题、2026年109题、null年80题;分赛事:GESP一级332题、GESP二级283题、GESP三级215题、GESP四级186题、GESP七级91题、GESP八级79题、GESP六级78题、GESP五级23题、CSP提高级3题、CSP入门级3题、NOIP提高组初赛2题。其中GESP三级该考点考过215题,属于高频必考。

【预测】基于2023-2026年逐年递增的趋势(287→413→401→109),未来基础语法类题目仍将是GESP三级、一级乃至四级的主战场,命题人大概率会继续在“下标访问+越界”或“花括号初始化”等细节处挖坑,难度不会降低。暂无足够依据预测具体年份的题型变化,但建议重点复习字符串构造与下标访问的边界情况。

同考点真题

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