Ada - 修剪并删除字符串上的特殊字符

时间:2011-11-16 11:40:08

标签: ada gnat

我有一个名为Input

的变量
Input : STRING (1 .. 80) ; 

我使用Ada.Strings和Ada.Text_IO作为库,我需要知道是否可以以及如何删除输入变量上的空格和特殊字符(例如顶点,逗号和句点)。

3 个答案:

答案 0 :(得分:3)

如果您有Ada.Strings,则很可能有Ada.Strings.FixedAda.Strings.Maps

Ada.Strings.Fixed.Translate的帮助下使用Ada.Strings.Maps方法将任何字符翻译为任何其他字符。

或者,您可以循环输入字符串,只将想要的字符附加到新字符串。 (不太优雅,但你不需要任何其他库)

答案 1 :(得分:2)

这里的Ada.Strings.Maps软件包可能会非常有用,特别是“To_Set”(定义你想要在Character_Sequence中删除的字符)和“Is_In”函数。

由于您正在删除而不是替换字符,因此您必须遍历该字符串,检查每个字符串是否“存在”要删除的字符集中。如果是这样,请不要将其附加到输出字符串缓冲区。

答案 2 :(得分:1)

嗯,首先你需要明白,如果你想从字符串中间删除一个字符,删除后的字符后面的所有字符都必须转移到左边的一个字符。这不是一个特定的问题。如果字符串很大,这可能效率很低。我不会打80个字符或更少“大”。

你必须要理解的第二件事是,在Ada中,与许多语言不同,字符串的大小非常合适。这意味着如果您要使用String变量作为缓冲区(例如:通过Text_IO输入),您还必须使用另一个变量跟踪其中有效数据的实际长度。

鉴于此,编写代码以识别您不想要的字符可能是一件简单的事情,并使用以下内容删除它们:

if (Bad_Index < Input_Length) then
    Input(Bad_Index .. Input_Length - 1) := Input(Bad_Index + 1 .. Input_Length);
end if;
Input_Length := Input_Length - 1;

然而,这是一种艰难的方式。如果你真的有一个你希望以这种方式操作的字符串,那么将它放在一个无界的字符串对象中可能是最容易的。 Ada.Strings.Unbounded.Find_TokenAda.Strings.Unbounded.Delete会做你需要的,而你所要写的就是围绕它们的循环。