Ada - 有没有办法遍历无界字符串的每个字符?

时间:2015-02-20 16:12:29

标签: ada

我基本上有一个名为a的无界字符串。 a目前正在存储" Hello"。我想检查字母O是否在字符串中。这就是为什么我想知道是否有一种方法可以检查每个角色的匹配情况以及是否有匹配。

注意:我不想知道整个字符串是否相等,我只是想知道字符串中是否有特定的字符。

3 个答案:

答案 0 :(得分:4)

我会使用Index:

if Ada.Strings.Unbounded.Index (A, "O") > 0 then

请注意,模式是String,而不是Character,但搜索单字符String与搜索Character相同。

但真正的答案是,您应该熟悉ARM的附录A,它描述了标准库,并且在提出这样的问题之前应该参考它。 ARM可在

获得

ARM

答案 1 :(得分:2)

请参阅Ada.Unbounded_Strings.ElementARM A.4.5(20)(82)以及ARM A.4.4(96)):

with Ada.Strings.Unbounded; use Ada.Strings.Unbounded;
with Ada.Text_IO; use Ada.Text_IO;
procedure Ubs is
   A : Unbounded_String := To_Unbounded_String ("hello");
begin
   for J in 1 .. Length (A) loop
      if Element (A, J) = 'o' then
         Put_Line (“'o' is in A”);
         exit;
      end if;
   end loop;
end Ubs;

答案 2 :(得分:0)

不太容易。

with Ada.Text_IO; use Ada.Text_IO;
with Ada.Strings.Unbounded; use Ada.Strings.Unbounded;

procedure str_array is
   a : Unbounded_String := To_Unbounded_String("Hello");

begin
   for i in 1 .. Length(a) loop
      if Element(a,i) = 'A' then 
         null;
      end if;
   end loop;

end str_array;

(西蒙打败了我)。

课程(对我来说也是如此!)是Unbounded_String是一个私有类型,不会像String那样公开内部细节。有点像C字符串和C ++ std :: string之间的区别。

有很好的技巧来处理固定字符串,主要是为了避免使用Unbounded_String,所以我很少使用后者而且我很抱歉让你误入歧途。

更容易。

   if Ada.Strings.Unbounded.Count((a), "A") /= 0 then 
      null;
   end if;

这仍然适用:String和Unbounded_String都提供更高级别的工具。使用它们......