Ada中如何对切片字符串重新索引?需保留原内容
Ada字符串重新索引解决方案
Ada标准库中没有专门用于仅重置字符串索引而不修改内容的预定义函数,但可以通过两种简单方式实现需求:
方法一:直接声明指定索引范围的字符串变量
直接创建一个索引范围为1..6的String变量,将原切片的内容直接赋值进去即可。这种方式简单直接,适合已知目标字符串长度的场景:
procedure String_Test is mystr: String := "Hello World"; str: String := mystr(6 .. 11); -- 原索引6..11,内容为" World" str_re_indexed: String(1 .. 6) := str; -- 直接赋值,索引变为1..6,保留所有字符 begin for K in str_re_indexed'First .. str_re_indexed'Last loop Put_Line(Integer'Image(K) & ": '" & str_re_indexed(K) & "'"); end loop; end String_Test;
运行后会输出索引1到6,每个位置的字符都完整保留(包括开头的空格)。
方法二:通用动态长度处理(适用于未知长度场景)
如果原切片的长度不确定,可以先获取原字符串的长度,再创建对应长度的目标字符串:
procedure String_Test is mystr: String := "Hello World"; str: String := mystr(6 .. 11); str_re_indexed: String(1 .. str'Length) := str; begin for K in str_re_indexed'First .. str_re_indexed'Last loop Put_Line(Integer'Image(K) & ": '" & str_re_indexed(K) & "'"); end loop; end String_Test;
这种方式不管原切片长度是多少,都能将目标字符串的索引重置为从1开始的连续范围,同时完整保留所有字符内容。
需要注意的是,你之前使用的Trim函数会移除字符串两端的空白字符,这是它的设计目的,因此不适合用于仅重置索引的场景。
内容的提问来源于stack exchange,提问作者mcxbain
相关产品推荐
相关产品推荐

