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

Ada语言如何实现按规则分割字符串取后半段(奇数长度含中间字符)

Ada字符串分割函数实现方案

核心计算逻辑

你需要的分割规则可以用统一公式计算起始下标,无需单独判断奇偶:
分割起始位置 = 输入字符串的首个下标 + 字符串长度整除2
该公式对奇偶长度都适配:

  • 长度为偶数时:比如长度8,8/2=4,取后4个字符,符合返回后半段的要求
  • 长度为奇数时:比如长度5,5/2=2(整数除法自动截断小数部分),取后3个字符,刚好包含中间字符+后半段

现有代码问题修正

你当前代码存在3个可直接修复的问题:

  • 函数内部使用的Mid变量未提前声明,会直接触发编译错误
  • 硬编码下标从1开始,不符合Ada字符串不定界的语法特性,传入非1开头的字符串会触发越界错误
  • 主程序调用分割函数时没有截取Get_Line返回的实际输入长度,会把输入内容后补的空格也纳入计算

完整可运行代码

with Ada.Text_IO;         use Ada.Text_IO;
with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;

procedure Split is
   function Split_String (S : in String) return String is
      -- 用S'First适配任意起始下标的字符串,兼容所有合法String输入
      Mid : constant Positive := S'First + (S'Length / 2);
   begin
      return S(Mid .. S'Last);
   end Split_String;

   S : String(1 .. 7);
   Input_Len : Integer;
begin
   Put("请输入长度不超过7的字符串: ");
   Get_Line(S, Input_Len);
   -- 仅传入实际输入长度的子串,排除多余空格
   Put_Line("分割结果: " & Split_String(S(1 .. Input_Len)));
end Split;

测试验证

  • 输入test(长度4),返回st
  • 输入stack(长度5),返回ack
  • 输入candy(长度5),返回ndy
  • 输入abcdefg(长度7),返回defg
    如果需要适配示例中长度为8的Overflow输入,只需将主程序中S的定义修改为String(1 .. 8)即可。

内容的提问来源于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 04:36:01