gpt4 book ai didi

string - 定义字母数字子类型的任何优雅方式?

转载 作者:行者123 更新时间:2023-12-01 00:22:23 28 4
gpt4 key购买 nike

这是我在这个网站上的第一个问题。我总是设法从一些与我的问题相似的人那里找到答案,但这一次似乎没有。

所以在这里,我试图生成大量相对较短的字符串以用作 ID 号,但希望它们只包含字母数字字符。

我尝试过一些事情,例如:

subtype Char is character range 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9';

添加括号,逗号,创建新类型而不是子类型。

我知道我可以枚举我想要的所有字符,但我只能让自己去做这样一个愚蠢的任务,比如用枚举类型编写每 62 个字符。

有没有办法将不同的区间连接成一个子类型?

编辑:所以这是我的代码:

with ada.text_io, ada.integer_text_io, ada.float_text_io, ada.numerics.discrete_random;
use ada.text_io, ada.integer_text_io, ada.float_text_io;

procedure randomID is

Subtype AlphaNumeric is character
with dynamic_predicate => AlphaNumeric in 'a'..'z' |
'A'..'Z' |
'1'..'9' ;
package CharGen is new ada.numerics.discrete_random (Alphanumeric);
CharG: CharGen.generator;
id: string (1..5);

begin
for i in 1..5 loop
CharGen.Reset(CharG);
id(i) := charGen.random(CharG);
end loop;
end randomID;

但我得到(无论我使用静态还是动态指示)这些错误:

09: warning: in instantiation at a-nudira.adb:54
09: warning: type "Result_Subtype" has predicates, attribute "First" not allowed
09: warning: Program_Error will be raised at run time
09: warning: in instantiation at a-nudira.adb:54
09: warning: expression fails predicate check on "Result_Subtype"
09: warning: in instantiation at s-rannum.ads:86
09: warning: in instantiation at a-nudira.adb:53
09: warning: type "Result_Subtype" has predicates, attribute "Last" not allowed
09: warning: in instantiation at s-rannum.adb:395
09: warning: in instantiation at a-nudira.adb:53
09: warning: type "Result_Subtype" has predicates, attribute "Last" not allowed



我知道 Ada.numerics 生成随机项目的方式与我的类型的性质存在冲突。有没有办法解决这个问题?

最佳答案

你至少可以通过两种不同的方式来做到这一点。

作为 Character 的子类型使用静态谓词:

subtype Alphanumeric_Character is Character
with Static_Predicate => Alphanumeric_Character in 'a' .. 'z' |
'A' .. 'Z' |
'0' .. '9';

作为适当的类型:

type Alphanumeric_Character is ('a', 'A',
'b', 'B',
'c', 'C',
...
'z', 'Z',
'0', '1', '2', '3', '4',
'5', '6', '7', '8', '9');

关于string - 定义字母数字子类型的任何优雅方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47584231/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com