在COBOL中不使用反向函数反转字符串

问题描述 投票:0回答:2

我的任务是在不使用反向函数的情况下反转cobol中的字符串。

到目前为止,我有这个:

MOVE 20 TO LOO.                       
MOVE 1  TO LOP.                       
MOVE 20 TO LOU.                       
MOVE EINA01 OF FORMAT1 TO WORTTXT1.   

PERFORM 20 TIMES                      
   MOVE WORTTXT1 (LOP:1) TO B (20:LOO)
   SUBTRACT 1 FROM LOO                
   ADD 1 TO LOP                       
   MOVE B  TO WORTTXT2 (20:LOU)       
   SUBTRACT 1 FROM LOU                
END-PERFORM.                          
MOVE WORTTXT2 TO AUSA01 OF FORMAT1.

AUSA01是输出EINA01的输入。

我现在遇到的问题是:如果我在输入字段中写“Hello”,我得到的只是“00000000000h”他只是反转第一个字母,但它应该看起来像“你好”。

string loops reverse move cobol
2个回答
1
投票

正如您所提到的,程序也必须反转空格,我建议您修改PERFORM循环,如下所示。

PERFORM 20 TIMES
MOVE WORTTXT1(LOP:1) TO B(LOO:1) 
SUBTRACT 1 FROM LOO
ADD 1 TO LOP
END-PERFORM.

完整计划:

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO-WORLD.
DATA DIVISION.
WORKING-STORAGE SECTION. 
01 EINA01 PIC X(20) VALUE 'Srinivasan          '.
01 WORTTXT1 PIC X(20) VALUE SPACES.
01 WORTTXT2 PIC X(20) VALUE SPACES.
01 AUSA01 PIC X(20) VALUE SPACES.
01 B PIC X(20) VALUE SPACES. 
01 LOO PIC 9(2) VALUE 0.
01 LOP PIC 9(2) VALUE 0.
PROCEDURE DIVISION.

MOVE 20 TO LOO.
MOVE 1 TO LOP.
MOVE EINA01 TO WORTTXT1.

PERFORM 20 TIMES
MOVE WORTTXT1(LOP:1) TO B(LOO:1) 
SUBTRACT 1 FROM LOO
ADD 1 TO LOP
END-PERFORM.

MOVE B TO AUSA01.
DISPLAY AUSA01.
STOP RUN.

注意:我没有使用数据项B,LOU和WORTTXT2,因为我觉得它们不是必需的。

输出:

          nasavinirS

试试吧here


0
投票

您也可以使用INSPECT来反转字符串。用这样的代码来反转8个字符的字符串SRC并在TGT中得到结果:

MOVE x'0807060504030201' TO TGT
INSPECT TGT CONVERTING x'0102030405060708' TO SRC

请注意,您可以使用此技巧以任何所需方式重新排序字段。

© www.soinside.com 2019 - 2024. All rights reserved.