C++回文字符串判断代码运行时大写字符变小写问题咨询
问题成因分析
核心错误:反转循环边界设置错误
你代码中负责反转写入的逻辑存在边界错误,对应代码段如下:
for (i = 0; i < n - 1; i++) { x[i] = y[c]; c--; } x[i] = '\0';
其中n是过滤后y数组的有效字符长度,你设置的循环条件i < n-1只会执行n-1次赋值操作,仅将y数组下标从n-1到1的字符依次写入x数组,y数组下标为0的首字符(也就是你测试用例里的大写字母A)完全没有被写入x数组。
循环结束后i的值等于n-1,你直接执行x[i] = '\0'将x数组的第n-1位设为字符串结束符,直接覆盖了本该写入的大写A,所以你会观察到x数组丢失了原本的首字母大写A,看起来像是大写字符被转为小写,实际上是该字符根本没有被写入到结果中。
修复方案
将反转循环的条件改为i < n即可解决大小写丢失问题,修改后反转逻辑会执行n次赋值,把y数组的所有字符反转写入x数组。
其他注意事项
- 当前代码的回文判断逻辑是区分大小写的,如果需要实现通用的回文判断(忽略大小写差异),可以在过滤字符时统一转为大写/小写后再存入y数组。
- 当前代码未严格校验输入长度,如果输入的字母总数超过49,会导致y数组溢出,存在内存安全风险。
内容的提问来源于stack exchange,提问作者jabn jk
相关产品推荐
相关产品推荐

