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
String 在ada中将子字符串另存为有界字符串_String_Substring_Ada - Fatal编程技术网

String 在ada中将子字符串另存为有界字符串

String 在ada中将子字符串另存为有界字符串,string,substring,ada,String,Substring,Ada,我有以下代码: Put_Line(Source_String (Source_String'First + Start-1..Source_String'First + Stop-2)); 它工作正常,但我想将其用作有界字符串 String1: String(1..50); 如果我使用 String1:= Source_String (Source_String'First + Start-1..Source_String'First + Stop-2) 但这段代码不起作用。我

我有以下代码:

Put_Line(Source_String (Source_String'First + Start-1..Source_String'First + Stop-2));
它工作正常,但我想将其用作有界字符串

   String1: String(1..50);
如果我使用

   String1:= Source_String (Source_String'First + Start-1..Source_String'First + Stop-2)
但这段代码不起作用。我不能将子字符串用作字符串。编译不会输出任何错误,但也不起作用
另外,当我只使用Put_行时,我的程序工作正常

这里似乎有一个误解:

String1:String(1..50)不声明有界字符串,但声明固定字符串。意识到这一点,很容易理解为什么作业通常“不起作用”。。。源字符串的片段长度必须正好为50个字符,否则赋值将产生约束错误

一种解决方案是使用有界字符串,但这在这里可能不是必需的,因此我将建议一种更简单的方法

考虑该程序,并对其进行结构化,以便在声明
String1
之前,
Start
Stop
的运行时值都是已知的。您可以使用的一个工具是“declare block”-这允许声明保持在其使用点的本地,这是一种良好的编程实践。。。稍后,当您进行重构时,这些都是将其抽象为过程的最佳选择

现在,您可以将赋值作为初始化器移动到声明中,字符串的长度从初始化开始计算。它的长度在运行时之前是未知的这一事实无关紧要,您可以从它的属性中找到长度

您可以在声明中移动很多内容,如果您不打算修改内容,另一个好的做法是使声明保持不变。因此,代码可能如下所示:

Start := ...
declare
   Source_String : constant String := Read_Line(File);
   Stop  : constant Natural := Second_Space(Source_String);
   String1 : constant String := Source_String (Source_String'First + Start-1
                                .. Source_String'First + Stop-2);
begin
   -- process String1
end; -- String1 goes out of scope here.

请不要发布告诉我们有些东西“不起作用”的问题。告诉我们到底发生了什么。我不明白为什么人们向我们寻求帮助,然后对我们隐瞒重要信息。对不起,这是我第一次问问题。试着把它也修好。