如何将Ada的Split_String函数转换为仅含一个字符串参数的过程
Ada字符串取后半段函数转过程实现方案
实现思路
利用in out类型的字符串参数,直接将后半段结果覆盖到原字符串的起始位置,不需要额外增加返回参数,符合仅设置一个字符串参数的要求。
过程实现代码
procedure Split_String (S : in out String) is Mid : constant Positive := 1 + (S'Length / 2); Half_Len : constant Natural := S'Last - Mid + 1; begin -- 将后半段内容覆盖到字符串开头位置 S (S'First .. S'First + Half_Len - 1) := S (Mid .. S'Last); end Split_String;
修改后的完整测试代码
with Ada.Text_IO; use Ada.Text_IO; with Ada.Integer_Text_IO; use Ada.Integer_Text_IO; procedure Test is procedure Split_String (S : in out String) is Mid : constant Positive := 1 + (S'Length / 2); Half_Len : constant Natural := S'Last - Mid + 1; begin S (S'First .. S'First + Half_Len - 1) := S (Mid .. S'Last); end Split_String; S : String (1 .. 7); Length : Natural; Half_Len : Natural; begin Put ("Type a string containing 7 characters: "); Get_Line (S, Length); -- 提前计算后半段长度,方便后续输出 Half_Len := Length - (Length / 2); -- 调用过程处理输入字符串 Split_String(S(1 .. Length)); Put("The other half of the string is: "); -- 只取前Half_Len个有效字符输出 Put(S(1 .. Half_Len)); end Test;
逻辑说明
- 分界点
Mid的计算逻辑和原函数完全一致,保证输出结果和原函数完全相同 - 过程中直接将后半段子串赋值到原字符串的起始位置,实现结果回传
- 调用时先根据输入字符串的长度计算后半段的长度,输出时只取前
Half_Len个字符,避免输出原字符串中残留的无效内容
内容的提问来源于stack exchange,提问作者leun
相关产品推荐
相关产品推荐

