You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 08:45:04