在 COBOL 中不使用反向函数来反转字符串
Reversing a string without using reverse function in COBOL
我的任务是在不使用 reverse 函数的情况下在 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”,他只是颠倒了第一个字母,但它应该看起来像“Hello”。
正如您提到的,程序也必须反转空格,我建议您修改 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
您还可以使用 INSPECT 来反转字符串。编写类似这样的代码来反转 8 个字符的字符串 SRC 并在 TGT 中获得结果:
MOVE x'0807060504030201' TO TGT
INSPECT TGT CONVERTING x'0102030405060708' TO SRC
请注意,您可以使用此技巧以任何需要的方式对字段重新排序。
我的任务是在不使用 reverse 函数的情况下在 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”,他只是颠倒了第一个字母,但它应该看起来像“Hello”。
正如您提到的,程序也必须反转空格,我建议您修改 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
您还可以使用 INSPECT 来反转字符串。编写类似这样的代码来反转 8 个字符的字符串 SRC 并在 TGT 中获得结果:
MOVE x'0807060504030201' TO TGT
INSPECT TGT CONVERTING x'0102030405060708' TO SRC
请注意,您可以使用此技巧以任何需要的方式对字段重新排序。