Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 访问Ada中字符串的第一个元素_Arrays_String_Ada - Fatal编程技术网

Arrays 访问Ada中字符串的第一个元素

Arrays 访问Ada中字符串的第一个元素,arrays,string,ada,Arrays,String,Ada,我将一个字符串传递到函数中,我想将字符串的第一个字符与一个数字进行比较 I.E. if String(1) = "3" then 当我编译时,我得到: warning: index for String may assume lower bound of 1 warning: suggested replacement String'First + 1 我真的很想纠正这个错误,但当我尝试“first”时,它实际上获取了一个数字,而不是字符 有更好的方法吗 我试着查找“第一个概念”,下面的

我将一个字符串传递到函数中,我想将字符串的第一个字符与一个数字进行比较

I.E. 
if String(1) = "3"  then
当我编译时,我得到:

warning: index for String may assume lower bound of 1
warning: suggested replacement String'First + 1
我真的很想纠正这个错误,但当我尝试“first”时,它实际上获取了一个数字,而不是字符

有更好的方法吗

我试着查找“第一个概念”,下面的网站解释说我实际上得到的是索引的编号,而不是实际的内容:

比如说,

Hello_World  : constant String := "Hello World!";
World        : constant String := Hello_World (7 .. 11);
Empty_String : constant String := "";
使用“首先,我将获得:

Array    'First 'Last 'Length 'Range
Hello_World   1       12       12     1 .. 12
World         7       11        5     7 .. 11
Empty_String  1        0        0     1 .. 0
基于这些信息,我无法从Hello world获得H(用于比较,比如Hello_world(1)=“H”)

编辑: 所以我最初的做法是 (在本例中插入一些变量名而不是字符串)

因此,从我所能说的情况来看,这是可行的,然而,我并没有写下所有这些,而是发现

String(String'First) = '1'
做同样的事情,但使用字符比较,这使更多的意义


谢谢大家的回答

警告建议您使用:

String(String'First + Index)
而不仅仅是

String(Index)

警告建议您使用:

String(String'First + Index)
而不仅仅是

String(Index)

你的问题中的代码有些奇怪。首先,您要调用变量“String”,并且它的类型是“String”。艾达会立即对此表示反对

您为该代码片段复制的警告语句没有意义

假设您的变量实际上被称为“值”,即:

值(1)与值(Value'First+1)不同,因为Value'First(在此声明中)是1。因此,最终将引用值(1+1)。您之所以会遇到这种情况,是因为您提到无法在“Hello World”字符串中引用“H”


现在警告是有效的,因为使用“First”(和“Last and”Range)引用数组边界更安全。但是,如果要先从“via”检索到的边界偏移,则需要使用适当的索引,通常使用0基或1基(在这种情况下,需要偏移1)。使用在您的上下文中更合适和可读的基础。

您的问题中的代码有些奇怪。首先,您要调用变量“String”,并且它的类型是“String”。艾达会立即对此表示反对

您为该代码片段复制的警告语句没有意义

假设您的变量实际上被称为“值”,即:

值(1)与值(Value'First+1)不同,因为Value'First(在此声明中)是1。因此,最终将引用值(1+1)。您之所以会遇到这种情况,是因为您提到无法在“Hello World”字符串中引用“H”


现在警告是有效的,因为使用“First”(和“Last and”Range)引用数组边界更安全。但是,如果要先从“via”检索到的边界偏移,则需要使用适当的索引,通常使用0基或1基(在这种情况下,需要偏移1)。在你的上下文中使用更合适和可读的基础。

字符串是新手Ada程序员最大的麻烦;对于那些已经是Cish语言字符串处理专家的人来说尤其如此

Ada字符串(实际上所有Ada数组)不像C那样基于0,也不像Fortran那样基于1。他们的基础上,但编码器觉得它。如果有人想从10索引他们的字符串。。。200,他们可以。因此,访问Ada字符串中的字符最安全的方法是使用
'first
属性(或者更好的是,使用
'range
'first..'last
循环它们)

在您的例子中,看起来您只想获取字符串中的第一个字符。对于名为
X
的字符串,最简单、最安全的方法是
X(X'first)


但在pactice中,你几乎永远不会这么做。相反,你会在字符串的
“first…”last
中循环寻找一些东西,或者只是使用
Ada.Strings中的一个例程。Fixed

字符串是新的Ada程序员最大的麻烦;对于那些已经是Cish语言字符串处理专家的人来说尤其如此

Ada字符串(实际上所有Ada数组)不像C那样基于0,也不像Fortran那样基于1。他们的基础上,但编码器觉得它。如果有人想从10索引他们的字符串。。。200,他们可以。因此,访问Ada字符串中的字符最安全的方法是使用
'first
属性(或者更好的是,使用
'range
'first..'last
循环它们)

在您的例子中,看起来您只想获取字符串中的第一个字符。对于名为
X
的字符串,最简单、最安全的方法是
X(X'first)


但在pactice中,你几乎永远不会这么做。相反,你可以在字符串的
'first…'last
中循环寻找一些东西,或者只是使用
Ada.Strings.Fixed

中的一个例程。我刚刚与另一位工程师讨论了这一点,得到了几乎相同的答案。这似乎是它的建议,但这不起作用。见下面我的答案…同意。你真正想做的是先使用
'first
而不是
1
,我刚刚和另一位工程师讨论过这个问题,得到了几乎相同的答案。这似乎是它的建议,但这行不通。见下面我的答案…同意。在这里,您真正想做的是首先使用类似于
”的内容,而不是
1
Er。。。你知道,你不可能有一个标准的,带-200的字符串-10索引范围,因为无约束的正索引子类型。嗯,至少你不能用它做任何有意义的事情:-)嗯。在我看来,我早在古代就看到过,但为了安全起见,我会修正我的答案,使用正数。(也许是一个