GESP 三级 · GESP 202506 C++ 三级 第 17 题

判断题 · 答案 A · 考点:函数

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

题目

string 的 substr(1, 3) 返回从下标 $1$ 开始的 $3$ 个字符的子串。

答案:A

考点

函数

解题思维

答案A。C++中字符串处理可以用字符数组或string类型。sizeof和strlen的结果不同。

常见错误

仔细审题,注意限定词和否定词。用排除法缩小选项范围。

详细解析(节选)

【考点】字符串操作|C++ STL 标准库|函数参数含义

考纲定位:GESP 三级 C++ 考试大纲中,字符串属于"基础语法与数据结构"模块,substr 是 std::string 成员函数,考察对 C++ STL 标准库函数的理解。命题人放这道题是为了卡住那些只背语法但不理解参数意义的考生,混淆起始下标和长度顺序。许多考生误以为参数顺序是长度在前,或者下标从 1 开始计数,导致对函数行为理解偏差。

解题思维:看到 substr(pos, len) 先想这是成员函数调用,参数顺序是起始位置、长度。关键观察是 pos 是下标(从 0 开始),len 是截取的字符数。推理依据是 C++ 标准库规范,substr 的定义。通法是遇到类似函数调用,先确认参数顺序和含义,再结合题目描述判断。例如,若题目描述说"从下标 1 开始的 3 个字符",则直接对应 substr(1, 3) 的参数顺序,无需额外转换。

陷阱拆解:错误选项 B 可能源于把参数顺序记反,以为 substr(1,3) 是从下标 3 开始取 1 个字符,或者把起始下标当成从 1 开始(C/C++ 下标习惯差异)。命题人利用的误区是参数记忆混淆和 C/C++ 下标习惯差异。细节是"从下标 1 开始"容易让人误以为下标从 1 计数,实际上 C++ 下标从 0 开始,但题目描述明确说了"从下标 1 开始",所以此处描述是正确的。另一种陷阱是考生可能忽略 substr 的第二个参数是长度而非结束位置,导致对返回子串长度产生误解。例如,若字符串为 'abcde',substr(1,3) 返回 'bcd',符合题目描述。

反命题思维:如果把题目改成 substr(1, 2) 或 substr(0, 3),答案会怎样变化?如果改成 substr(3, 1) 可能越界,考察边界条件。若题目改成"从下标 1 开始的 2 个字符",则对应 substr(1,2),答案仍为正确。提醒:刷到类似题,先问自己"命题人想考我什么"。

同考点真题

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