Ada-是否有方法遍历无界字符串的每个字符?

Ada-是否有方法遍历无界字符串的每个字符?,ada,Ada,我基本上有一个无界的字符串,比如a。并且a当前正在存储“Hello”。我想检查字母O是否在字符串中。这就是为什么我想知道是否有一种方法可以检查每个字符是否匹配以及是否存在匹配 注意:我不想知道整个字符串是否相等,我只想知道字符串中是否有特定字符。不太容易 with Ada.Text_IO; use Ada.Text_IO; with Ada.Strings.Unbounded; use Ada.Strings.Unbounded; procedure str_array is a : U

我基本上有一个无界的字符串,比如a。并且a当前正在存储“Hello”。我想检查字母O是否在字符串中。这就是为什么我想知道是否有一种方法可以检查每个字符是否匹配以及是否存在匹配

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

不太容易

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;
(西蒙打败了我)

教训是(对我来说也是!)作为私有类型的无界_字符串不会像字符串那样公开内部细节。有点像C字符串和C++ STD::String。

的区别 处理固定字符串有一些很好的技巧,这些技巧基本上可以避免使用无界_字符串,因此我很少使用后者,我很抱歉将您引入歧途

更容易

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

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

请参见
Ada.Unbounded_Strings.Element
(and,and):

带有Ada.Strings.Unbounded;使用Ada.Strings.Unbounded;
使用Ada.Text_IO;使用Ada.Text\u IO;
瑞银的程序是
A:无界字符串:=到无界字符串(“你好”);
开始
对于1中的J。。长度(A)环
如果元素(A,J)=‘o’,则
放在一行(“o”在A中);
出口
如果结束;
端环;
结束瑞银;
我会使用索引:

if Ada.Strings.Unbounded.Index (A, "O") > 0 then
请注意,模式是一个字符串,而不是一个字符,但搜索一个字符串与搜索一个字符是相同的

然而,真正的答案是,您应该熟悉ARM的附录A,它描述了标准库,并且应该在提出类似问题之前参考它。手臂可在以下位置使用:


对于1..L循环中的i,如果(A(i)=猜测),那么------这就是我的情况,但我得到一个错误,说“索引组件中需要数组类型”我不认为
'Range
适用于无界字符串?这是必要的,因为索引不是一个可重载的运算符(与C++不同)。如果输入字符串是
“hello world”
,您可能需要在其中添加
exit
return
。您也可以这样做:
如果(对于某些x个to\u字符串(a) =>x='o'),然后在表达式函数中使用此模式,并/或在表达式函数中使用此模式。看起来您还没有浏览参考手册中声明无界字符串及其操作的部分。