我有下面的代码检查,如果输入的字符串是字母或不阿达:阿达字母数字字符串索引检查失败,运行时错误
function Check_AplhaNumeric(input_String:in String) return Boolean is
begin
Alphanumeric_or_not:=TRUE;
for Index_Character in 1..Length(To_Unbounded_String(input_String)) loop
Alphanumeric_or_not:=Is_Alphanumeric(Character'Val(Character'Pos(input_String(Index_Character))));
exit when Alphanumeric_or_not = False;
end loop;
return True;
end Check_AplhaNumeric;
下面的代码调用上面的函数三次
Is_it:=Check_AplhaNumeric(stringInput(1..First_Semicolon-1));
Is_it:=Check_AplhaNumeric(stringInput(First_Semicolon+1..Second_Semicolon-1));
Is_it:=Check_AplhaNumeric(stringInput(Second_Semicolon+1..stringInput'Last));
我有一个输入字符串,例如:a;value;b
,它根据输入中的分号分为三部分。 第一次调用Check_AlphaNumeric
作品就好了,并检测是否该字符串是字母数字与否, 然而,其中包括第二和第三部分从字符串调用生成以下错误:
raised CONSTRAINT_ERROR : alpha.adb:247 index check failed
我不不知道什么似乎是错误的,因为当我在字符串中的第一个分号之前首次调用它时,它工作得很好。
即使其中一个字符不是字母数字,我也需要它打印一些消息并退出程序。
您正在调用'To_Unbounded_String',以便您可以将结果传递给'Length'函数。只需使用'input_String'Length'。 'Character'Val(Character.Pos(...))'是无用的;他们是逆向操作。你的函数总是返回'True'。你假设字符串的下限为1;使用“Range”而不是'1 ..'Length'。 – 2014-11-02 21:43:20