COBOL字符串反转实现异常求助:测试结果长度不符
COBOL字符串反转功能异常排查与修复
问题根源
你当前代码的核心错误在于错误地将包含长度字段和字符字段的组项直接传入FUNCTION REVERSE:
str是包含len(2字节数字)和chars(30字节字符)的组项,直接对str执行REVERSE会反转整个组的所有字节,包括len的内容。- 反转后的结果直接
MOVE到result组项,会把反转后的字节覆盖result的len和chars,导致result.len的值变成原chars末尾字符的反转,最终出现测试中长度为空的异常。
修复代码
将反转范围限定为str中实际有效的字符串部分,并正确传递长度值:
identification division. program-id. solution. data division. linkage section. 01 str. 05 len pic 99. 05 chars pic a(30). 01 result. 05 len pic 99. 05 chars pic a(30). procedure division using str result. *> 传递原始长度到结果 move len of str to len of result *> 仅反转有效长度的字符串内容 if len of str > 0 move function reverse(chars of str(1:len of str)) to chars of result(1:len of str) end-if goback. end program solution.
关键修改点
- 保留长度信息:直接将输入的
str.len赋值给result.len,确保结果长度与输入一致。 - 精准反转范围:仅对
chars字段中从第1位开始、长度为str.len的有效子串执行反转操作,避免影响长度字段。 - 空字符串处理:增加长度大于0的判断,避免对空字符串执行无效操作。
验证效果
修改后重新测试:
- 输入"hello"时,
result.len会被设置为5,result.chars(1:5)会得到"olleh",与预期完全匹配,测试不再出现长度不匹配的错误。 - 空字符串、单字符等边界场景也能正常处理。
内容的提问来源于stack exchange,提问作者Stefan Glova
相关产品推荐
相关产品推荐

