比较Ada中的无界字符串

时间:2018-08-07 09:36:30

标签: string ada

您好,我面临比较Ada中两个无界字符串并使用名称(字符串)作为键以排序方式排列数据值集的困境。我无所适从来决定如何比较ada中的两个字符串,或更确切地说是确定哪个字符串以升序排在第一。

    with Ada.Text_IO;
    with Ada.Integer_Text_IO;
    with Ada.Unchecked_Deallocation;
    with Ada.Strings.Unbounded; use Ada.Strings.Unbounded;
    with Ada.Text_IO.Unbounded_IO; use Ada.Text_IO.Unbounded_IO;

    procedure Main is
       package TIO renames Ada.Text_IO;
       package IIO renames Ada.Integer_Text_IO;
       Name_Main1, Name_Main2, Name_Main3 : Ada.Strings.Unbounded.Unbounded_String;
    begin
       TIO.Put_Line("Enter the Name of the student :");
       Ada.Text_IO.Unbounded_IO.Get_Line(Name_Main1);
       TIO.Put_Line("Enter the Name of the student :");
       Ada.Text_IO.Unbounded_IO.Get_Line(Name_Main2);
       TIO.Put_Line("Enter the Name of the student :");
       Ada.Text_IO.Unbounded_IO.Get_Line(Name_Main3);

       if Name_Main1 > Name_Main2 then
          TIO.Put_Line("Some semblance");TIO.New_Line;
       else
          TIO.Put_Line("Cant be matched");
       end if;

    end Main; 

更多的是,这些字符串中大多数都具有不同的长度,这无济于事。我具有C背景,因此正在寻找一种 strcmp 功能。 如果可以的话请帮忙。网上关于Ada的这一重要功能的文档很少或没有。

1 个答案:

答案 0 :(得分:3)

Ada参考手册

对于Unbounded_String:

http://www.adaic.org/resources/add_content/standards/12rm/html/RM-A-4-5.html

83 每个函数“ =”,“ <”,“>”,“ <=”和“> =”返回的结果都与应用到由Left和Right给出或表示的String值的相应String操作相同。

对于字符串文字:

http://www.adaic.org/resources/add_content/standards/12rm/html/RM-3-6-3.html

5 为所有字符串类型定义了54个字符串文字(请参见2.6和4.2)。与所有非限制的一维数组类型一样,串联运算符&是为字符串类型预定义的。与所有一维离散数组类型一样,为字符串类型预定义了排序运算符<,<=,>和> =。这些排序运算符对应于字典顺序(请参见4.5.2)。

对于一维数组类型:

http://www.adaic.org/resources/add_content/standards/12rm/html/RM-4-5-2.html

26/3  对于离散数组类型,预定义的排序运算符使用组件类型的预定义顺序关系与字典顺序相对应:空数组在字典上小于具有至少一个组件的任何数组。在非空数组的情况下,如果左操作数的第一部分小于右操作数,则左操作数在字典上小于右操作数。否则,仅当左操作数的第一个成分相等时,左操作数在字典上小于右操作数;在字典上,左操作数的尾部在字典上小于右操作数(尾部由第一个以外的其余成分组成,可以为null)

示例:

37

“”“ <” A“和” A“ <” Aa“-正确

“ Aa” <“ B”和“ A” <“ A”-正确

如果需要对Unbounded_Strings进行排序,则可以使用Containers.Generic_Array_Sort:

with Ada.Strings.Unbounded; use Ada.Strings.Unbounded;
with Ada.Text_IO; use Ada.Text_IO;
with Ada.Text_IO.Unbounded_IO; use Ada.Text_IO.Unbounded_IO;
with Ada.Containers.Generic_Array_Sort;

procedure Main is
   Name_Main1, Name_Main2, Name_Main3 : Unbounded_String :=
     Null_Unbounded_String;
begin
   Put_Line ("Enter the Name of the student :");
   Get_Line (Name_Main1);
   Put_Line ("Enter the Name of the student :");
   Get_Line (Name_Main2);
   Put_Line ("Enter the Name of the student :");
   Get_Line (Name_Main3);

   declare
      --  Array of Unbounded_Strings
      type Unbarr is array (Positive range <>) of Unbounded_String;

      --  Sort procedure
      procedure Unbsort is new Ada.Containers.Generic_Array_Sort
        (Positive, Unbounded_String, Unbarr, "<");

      --  Array of Unbounded_Strings
      Z : Unbarr := Name_Main1 & Name_Main2 & Name_Main3;
   begin
      --  Sort array
      Unbsort (Z);
      --  Output sorted array
      Put_Line ("Sorted:");
      for X of Z loop
         Put_Line (X);
      end loop;
   end;

end Main;.