string 的 substr(1, 3) 返回从下标 $1$ 开始的 $3$ 个字符的子串。
答案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),答案仍为正确。提醒:刷到类似题,先问自己"命题人想考我什么"。