String Ada-试图从字符串中删除空格?

String Ada-试图从字符串中删除空格?,string,ada,String,Ada,这个问题是关于我正在为Ada编程入门课程编写的一个程序。我只能使用基本文本、整数和浮点包。我现在正在编写一个过程来删除字符串中的空格,并且在同一行上不断出现约束错误。这是一行: if inputString(count) /= Character'Val(32) then 我将count设置为从1开始,然后通过循环递增,直到字符串结束,这将依次检查字符串的每个字符,看看它是否不同于空格(32)的字符值。然后我将包括这一行: noSpace(count..count) := inputStrin

这个问题是关于我正在为Ada编程入门课程编写的一个程序。我只能使用基本文本、整数和浮点包。我现在正在编写一个过程来删除字符串中的空格,并且在同一行上不断出现约束错误。这是一行:

if inputString(count) /= Character'Val(32) then
我将count设置为从1开始,然后通过循环递增,直到字符串结束,这将依次检查字符串的每个字符,看看它是否不同于空格(32)的字符值。然后我将包括这一行:

noSpace(count..count) := inputString(count..count) 
其中noSpace是不带空格的字符串。我的思路可能完全偏离了,我可能需要从一个完全不同的角度来看待这个问题


更新:我现在已成功通过错误消息并成功从字符串中删除空格。但是现在,当我打印新字符串时,它后面有随机变化的字符和阴影空格。我相信问题是因为新字符串比前一个字符串短,并且最后的字符不同

计数应首先从InputString开始,而不是从1开始。
特别是,当InputString被创建为另一个字符串的切片/子字符串时,它的第一个字符很可能不在索引1处。

计数应该首先从InputString开始,而不是从1开始。
特别是,当InputString被创建为另一个字符串的切片/子字符串时,它的第一个字符很可能不在索引1处。

该错误可能隐藏在其他地方

试试这个:

带有Ada.Text\u IO;
过程字符串\u移除\u空间为
函数Count_空间(S:String)返回自然值为
_空间之和:自然:=0;
开始
对于S'范围循环中的I
如果S(I)='',则
_空间之和:=_空间之和+1;
如果结束;
端环;
返回_空间的和_;
结束计数_空间;
输入字符串:字符串:=“苹果在树上”;
输入\ u No:String:=“appleisonetree”;
无空格:字符串(1..Input_String'Length-Count_Space(Input_String));
指数:正:=1;
开始
对于输入_字符串范围循环中的I
如果输入_字符串(I)='',则
无空格(索引):=输入字符串(I);
指数:=指数+1;
如果结束;
端环;
Ada.Text\u IO.Put\u行(输入字符串);
Ada.Text\u IO.Put\u行(无空格);
结束字符串\u删除\u空格;

该漏洞可能隐藏在其他地方

试试这个:

带有Ada.Text\u IO;
过程字符串\u移除\u空间为
函数Count_空间(S:String)返回自然值为
_空间之和:自然:=0;
开始
对于S'范围循环中的I
如果S(I)='',则
_空间之和:=_空间之和+1;
如果结束;
端环;
返回_空间的和_;
结束计数_空间;
输入字符串:字符串:=“苹果在树上”;
输入\ u No:String:=“appleisonetree”;
无空格:字符串(1..Input_String'Length-Count_Space(Input_String));
指数:正:=1;
开始
对于输入_字符串范围循环中的I
如果输入_字符串(I)='',则
无空格(索引):=输入字符串(I);
指数:=指数+1;
如果结束;
端环;
Ada.Text\u IO.Put\u行(输入字符串);
Ada.Text\u IO.Put\u行(无空格);
结束字符串\u删除\u空格;

如果输入字符串中有空格,则输出字符串的有效部分必须更短。我想你写了类似的东西

noSpace : String := inputString;
inputString
中没有空格的情况下,是否以
noSpace
开始?然后,当您挤出空格时,您似乎在将垃圾(未定义的字符)写入
noSpace
的末尾。这并不重要,只要你只处理有效的部分

我试过这个:

带有Ada.Text\u IO;使用Ada.Text\u IO;
程序拉雷珀是
函数带_空间(S:String)返回字符串为
结果:字符串:=S;
当前:正:=结果“第一个”;
Last:Natural:=结果的Last;
开始
环
当前>上次时退出;--处理整个字符串
如果结果(当前)='',则
--将绳子的其余部分向后滑动一圈
结果(当前..上次-1):=结果(当前+1..上次);
--这也将长度减少了1
Last:=Last-1;
其他的
--非空格字符,跳过
电流:=电流+1;
如果结束;
端环;
--仅返回结果中不包含空格的部分
返回结果(Result'First..Last);
端条间距;
开始
放线(“|”和带空格(“”&“|”);
放线(“|”和带空格(“”&“|”);
放置线(“|”和带空间(“a”)和“|”);
放置线(“|”和带空间(“ab”)和“|”);
放置线(“|”和带空间(“a”)和“|”);
放置线(“|”和带空间(“a”)和“|”);
放置线(“|”和带空间(“ab”)和“|”);
放置线(“|”和带空间(“ab”)和“|”);
末梢拉长;
哪个输出

$ ./lareaper 
||
||
|a|
|ab|
|a|
|a|
|ab|
|ab|

如果输入字符串中有空格,则输出字符串的有效部分必须更短。我想你写了类似的东西

noSpace : String := inputString;
inputString
中没有空格的情况下,是否以
noSpace
开始?然后,当您挤出空格时,您似乎在将垃圾(未定义的字符)写入
noSpace
的末尾。这并不重要,只要你只处理有效的部分

我试过这个:

带有Ada.Text\u IO;使用Ada.Text\u IO;
程序拉雷珀是
函数带_空间(S:String)返回字符串为
结果:字符串:=S;
当前:正:=结果“第一个”;
Last:Natural:=结果的Last;
开始
环
当前>上次时退出;--处理整个字符串
如果结果(当前)='',则
function Strip_Space (Input_String : String) return String is
    No_Space : String(1..Input_String'Length);

    Index : Positive := 1;
begin

    for I in Input_String'range loop
        if Input_String(I) /= ' ' then
            No_Space(Index) := Input_String(I);
            Index := Index + 1;
        end if;
    end loop;

    return No_Space(1 .. Index - 1);
end Strip_Space;