在我的PLSQL程序中,在输入的字符串中查找元音并检查其是否为回文的错误是什么



这是我为PLSQL程序编写的代码,用于计算用户输入的字符串中的元音数量,并检查其是否为回文,并将其显示为outptut。

SET SERVEROUTPUT ON
DECLARE
STR VARCHAR(30);
N VARCHAR(30);
REV VARCHAR(30);
L NUMBER(10);
TEMP VARCHAR(30);
C NUMBER(10):=0;
BEGIN
STR:='&STR';
TEMP:=STR;
L:=LENGTH(STR);
FOR I IN 1..L
LOOP
REV:=(REV||SUBSTR(STR,L,1));
N:=SUBSTR(STR,I,1);
IF N IN ('A','E','I','O','U','a','e','i','o','u')
THEN
C:=C+1;
END IF;
L:=L-1;
END LOOP;
DBMS_OUTPUT.PUT_LINE('ENTERED STRING IS '||STR);
DBMS_OUTPUT.PUT_LINE('THE NUMBER OF VOWELS IN THE STRING IS:'||C);
IF(TEMP=REV)
THEN
DBMS_OUTPUT.PUT_LINE('ITS A PALINDROME');
ELSE
DBMS_OUTPUT.PUT_LINE('ITS NOT A PALINDROME');
END IF;
END;
/

我在SQL*Plus中尝试了这个程序,并将其作为输出输出

有什么修复吗??!

这里有一个替代解决方案,而不是修复代码。

declare
STR varchar2(30);
REV varchar2(30);
C number(10) := 0;
begin
STR:='&STR';
select reverse(STR) into REV from DUAL;
C := regexp_count(STR, '[AEIOUaeiou]');
DBMS_OUTPUT.PUT_LINE(to_char(C));
if STR = REV then
DBMS_OUTPUT.PUT_LINE('Palindrome.');
end if;
end;

请参阅Oracle"reverse"函数和REGEXP_COUNT

以下是我在SQL*Plus中运行上述代码时的示例输出

Enter value for str: MADAM
old   6:   STR:='&STR';
new   6:   STR:='MADAM';
2
Palindrome.

编辑

我对您代码的修复。

DECLARE
STR VARCHAR2(30);
N CHAR(1);
REV VARCHAR2(30);
L NUMBER(10);
C NUMBER(10):=0;
BEGIN
STR:='&STR';
L:=LENGTH(STR);
FOR I IN 1..L
LOOP
N:=SUBSTR(STR,(I * -1),1);
REV:=REV||N;
IF N IN ('A','E','I','O','U','a','e','i','o','u') THEN
C:=C+1;
END IF;
END LOOP;
DBMS_OUTPUT.PUT_LINE('ENTERED STRING IS '||STR);
DBMS_OUTPUT.PUT_LINE('THE NUMBER OF VOWELS IN THE STRING IS:'||C);
IF(STR=REV) THEN
DBMS_OUTPUT.PUT_LINE('ITS A PALINDROME');
ELSE
DBMS_OUTPUT.PUT_LINE('ITS NOT A PALINDROME');
END IF;
END;

请参阅SUBSTR函数。

相关内容

最新更新