如果字符串 s 的值是 GESP,以下代码 s 的最后结果是( )
for (int i = 0; i < s.length(); i++) {
s[i] = toupper(s[i] + i);
}答案D。追踪for循环:记录每次循环变量的值和累积结果的变化。注意循环终止条件。
for循环体可能一次都不执行!这是和while循环一样的"先判断后执行"机制。
【考点】字符串遍历|ASCII字符运算|toupper函数
【解题思维】这道题考的是"字符是整数"这一底层事实。字符串s本质是char数组,每个元素存ASCII码。循环里s[i]+i是整数加法:'G'(71)+0=71→'G';'E'(69)+1=70→'F';'S'(83)+2=85→'U';'P'(80)+3=83→'S'。toupper只是确保结果是大写(对大写字母无实际影响)。
【陷阱拆解】选项B"HFTR"和C"hesp"都犯了两个错误:要么把字符误当字符串(以为s[i]+i是拼接),要么忽略ASCII码偏移量。最阴险的是D选项"GFUS"——它正确但容易让人怀疑"为什么P+3变S?"。如果你只背"toupper转大写",完全不懂字符内码,就会卡在这里反复纠结,甚至选A以为没变化。字符串题的核心不是语法,是理解"字符值可参与算术运算"。
【反命题思维】若把i改成s.length()-1-i,偏移量反向变成"GFSU";若去掉toupper,结果不变(因为全是大写);若把条件改成s[i]<='Z',则小写字母会被影响。刷到字符串+循环题,先问:它到底想考遍历、偏移、还是条件判断?