如何在循环中实现字符值递增,生成A至对应数量的字母数组?
搞定Pascal中字母序列填充数组的问题
嘿,我看你已经走对了大半路子,就差两个小细节调整,咱们来把这个问题解决掉:
第一个问题:字符递增的正确姿势
在Pascal里,直接把字符和整数做加法(比如你写的'A' + I -1)是行不通的,得用字符和ASCII码的转换函数:
Ord('A')能拿到'A'对应的ASCII数值(也就是65)- 给这个数值加上偏移量后,再用
Chr()把数值转回到对应的字符,这样就能实现字母递增啦
第二个问题:未定义大小的数组
你说Piles是未定义大小的数组,在Pascal里得先给它分配合适的空间才行:
- 如果用动态数组,可以先根据生成的随机数用
SetLength()设置长度,这样不会浪费空间 - 如果想用静态数组,因为随机数范围是2到10,直接把数组定义成
array[1..10] of Char就够了,足够容纳最大的随机数长度
修正后的代码示例
方式一:用动态数组(更灵活)
var RandomNum: Integer; Piles: array of Char; I: Integer; begin RandomNum := RandomRange(2, 10); // 先给动态数组分配对应长度的空间 SetLength(Piles, RandomNum); // 循环从0开始,直接用I作为偏移量 for I := 0 to RandomNum - 1 do begin Piles[I] := Chr(Ord('A') + I); Writeln(Piles[I]); end; end;
方式二:用静态数组(贴合你原来的循环写法)
var RandomNum: Integer; Piles: array[1..10] of Char; I: Integer; begin RandomNum := RandomRange(2, 10); // 循环从1开始,偏移量要减1才能对应A的起始 for I := 1 to RandomNum do begin Piles[I] := Chr(Ord('A') + I - 1); Writeln(Piles[I]); end; end;
这样调整后,当随机数是6的时候,数组就会准确填充成[A,B,C,D,E,F]啦,完美符合你的需求~
内容的提问来源于stack exchange,提问作者CatCalledBlep
相关产品推荐
相关产品推荐

