执行下面 C++ 代码后将输出"China"。()
string a="china";
a.replace(0,1,"C");
cout<<a<<endl;这题考的是 string 的 replace 方法参数含义。拿到题别急着敲代码,先盯着 replace(0,1,"C") 这三个参数:0 是起始位置,1 是要删掉的字符数,"C" 是填进去的新字符。把"china"下标 0 的'c'删了换成'C',自然就变成"China"了。
学生最容易在这里栽跟头,就是死记硬背参数顺序,或者把 replace 理解成"替换后字符串的长度"。比如看到 replace(0,1,"C"),误以为是把前 1 个字符替换成"C"这个字符串,结果字符串变长了;或者混淆参数顺序,以为第二个参数是替换后的长度。其实 replace 的第二个参数 len 明确指代的是"被替换掉的字符个数",不是替换后的长度。这道题就是专门挖这个坑,让你以为是在做长度计算,其实只是单字符替换。
【考点】string 类 replace 方法|字符串可变性|函数参数语义
1. 考纲定位与命题视角 这道题出自 GESP 三级大纲,核心考查的是 C++ string 对象的 replace 方法。命题人挖坑的意图非常明确:利用学生对 replace 参数含义的模糊记忆。很多初学者背公式时,只记得"replace(pos, len, str)"这个顺序,却搞不清"len"到底是指"替换掉的字符数"还是"替换后字符串的新长度"。题目给出的代码a.replace(0,1,"C"),如果学生误以为"1"代表替换后字符串长度,或者把"C"当成替换后的长度去理解,就会陷入逻辑死胡同。这道题就是利用这个认知缝隙,让死记硬背结论的学生直接掉坑,考察的是对 API 语义的精确理解。
2. 概念澄清:replace 到底在干什么? 在 C++ 中,string 是可变的容器,replace 方法的作用是:从指定位置 pos 开始,删除 len 个字符,然后用新字符串 str 填补这个空缺。关键点在于,len 参数严格对应的是"被删除的字符数量",而不是"新字符串的长度"。如果 str 的长度和 len 不一致,replace 会先删除 len 个字符,再插入整个 str 字符串,导致总长度发生变化。但在本题中,len=1,str="C",长度刚好匹配,属于最简单的单字符替换场景。
3. 解题思维:从代码到结果 拿到题先别急着敲,脑子里过一遍执行流程:
4. 避坑指南:为什么容易错? 这道题最大的陷阱在于参数语义混淆。学生可能会想:"replace(0,1,"C")"是不是表示把前 1 个字符替换成 "C" 这个字符串?如果是这样,结果应该是 "China",看似正确,但本质上是把"C"当成了替换后的字符串,而忽略了 len 的定义。更阴险的是,如果学生误以为 replace 的第二个参数是"替换后字符串的长度",那么看到 replace(0,1,"C") 就会困惑:"替换后长度是 1?那原字符串长度是 5,删掉 1 个再插入 "C"(长度 1),总长度还是 5,这逻辑对不上。"这种思维误区会导致学生在面对更复杂的 replace 调用时完全迷失。
5. 考频趋势与预测 从题库数据看,基础语法(含 string 操作)在 GESP 三级中占比很高,2023 年考了 287 题,2024 年 413 题,2025 年 401 题,2026 年 109 题,呈现逐年上升趋势,说明字符串操作是近年高频考点。循环结构在三级中也考得不少(2023 年 77 题,2024 年 128 题,2025 年 158 题),但本题属于基础语法中的 string 方法,更贴近 GESP 三级对代码阅读和简单逻辑判断的要求。基于这个趋势,未来 GESP 三级和四级继续强化 string 方法(如 replace、erase、insert)的参数语义考察的概率很大,尤其是像 replace 这种容易混淆参数的方法,命题人可能会设计更复杂的场景,比如 replace 后接其他操作,或者参数顺序故意打乱,来进一步测试学生的理解深度。
6. 总结 这道题答案选 A。核心在于准确理解 replace 的第二个参数是"被替换的字符数",而不是"替换后字符串长度"。做题时遇到 string 方法,先别急着模拟,先把参数含义在纸上写清楚,再一步步推演,就能避开命题人精心设计的坑。