String Ada读取字符串(相当于扫描%s)

String Ada读取字符串(相当于扫描%s),string,scanf,ada,String,Scanf,Ada,如何读取与C中scanf(“%s”)类似的单词(跳过空格并读取字符,直到遇到空格?skip\u Leading\u空格: 环 Next:=Ada.Text\u IO.Get; 当不是空白中的下一个时退出; 结束循环跳过前导空间; 读单词: 环 Word:=Word&Next; Next:=Ada.Text\u IO.Get; 在空白处下一步时退出; 结束循环读取单词; 跳过前导空格: 环 Next:=Ada.Text\u IO.Get; 当不是空白中的下一个时退出; 结束循环跳过前导空间; 读单

如何读取与C中
scanf(“%s”)
类似的单词(跳过空格并读取字符,直到遇到空格?

skip\u Leading\u空格:
环
Next:=Ada.Text\u IO.Get;
当不是空白中的下一个时退出;
结束循环跳过前导空间;
读单词:
环
Word:=Word&Next;
Next:=Ada.Text\u IO.Get;
在空白处下一步时退出;
结束循环读取单词;
跳过前导空格:
环
Next:=Ada.Text\u IO.Get;
当不是空白中的下一个时退出;
结束循环跳过前导空间;
读单词:
环
Word:=Word&Next;
Next:=Ada.Text\u IO.Get;
在空白处下一步时退出;
结束循环读取单词;

从标准输入读取单词。作为函数编写。(未经测试。)

函数下一个单词返回字符串为
包Latin_1重命名Ada.Characters.Latin_1;
子类型空白是字符
使用静态_谓词=>在“”中的空格|拉丁文_1.HT;
使用所有类型Ada.Strings.Unbounded.Unbounded_String;
单词:Ada.Strings.Unbounded.Unbounded_String;
其次:性格;
开始
跳过前导空格:
环
Ada.Text_IO.Get(下一步);
不存在时退出(空白中的下一个);
结束循环跳过\u引导空间;
读单词:
环
Word:=Word&Next;
Ada.Text_IO.Get(下一步);
在空白处下一步时退出;
结束循环读取单词;
返回到_字符串(Word);
结束下一个单词;

从标准输入读取单词。作为函数编写。(未经测试。)

函数下一个单词返回字符串为
包Latin_1重命名Ada.Characters.Latin_1;
子类型空白是字符
使用静态_谓词=>在“”中的空格|拉丁文_1.HT;
使用所有类型Ada.Strings.Unbounded.Unbounded_String;
单词:Ada.Strings.Unbounded.Unbounded_String;
其次:性格;
开始
跳过前导空格:
环
Ada.Text_IO.Get(下一步);
不存在时退出(空白中的下一个);
结束循环跳过前导空间;
读单词:
环
Word:=Word&Next;
Ada.Text_IO.Get(下一步);
在空白处下一步时退出;
结束循环读取单词;
返回到_字符串(Word);
结束下一个单词;

您想要扫描,因此最好使用Ada标准库中提供的内容进行扫描。一个候选者是
Ada.Strings.Fixed.Find_Token

with Ada.Strings.Fixed, Ada.Strings.Maps.Constants, Ada.Text_IO;
use Ada.Text_IO, Ada.Strings;

procedure Read_Word is
    Text  : constant String    := Get_Line;
    First : Positive;
    Last  : Natural;
    White : Maps.Character_Set := Maps.To_Set (" ");
begin
    Fixed.Find_Token
      (Source => Text,
       Set    => White,
       Test   => outside,
       First  => First,
       Last   => Last);
    Put_Line ("word is: " & Text (First .. Last) & '.');
end Read_Word;

您需要扫描,因此最好使用Ada标准库中提供的内容。一个候选者是
Ada.Strings.Fixed.Find_Token

with Ada.Strings.Fixed, Ada.Strings.Maps.Constants, Ada.Text_IO;
use Ada.Text_IO, Ada.Strings;

procedure Read_Word is
    Text  : constant String    := Get_Line;
    First : Positive;
    Last  : Natural;
    White : Maps.Character_Set := Maps.To_Set (" ");
begin
    Fixed.Find_Token
      (Source => Text,
       Set    => White,
       Test   => outside,
       First  => First,
       Last   => Last);
    Put_Line ("word is: " & Text (First .. Last) & '.');
end Read_Word;

标签的存在是为了使代码更清晰,显然,您可以使用in、in/out和out参数使其成为一个过程。您也可以将其设置为函数,但取决于您使用的Ada修订版,您可能无法使用所有类型的参数传递模式。我太像一个老师了,无法在第一次给出完整的解决方案。;-)我绝对不会放弃这些标签,因为它们使源代码更易于阅读。标签的存在是为了使代码更清晰,显然,您可以使用in、in/out和out参数使其成为一个过程。您也可以将其设置为函数,但取决于您使用的Ada修订版,您可能无法使用所有类型的参数传递模式。我太像一个老师了,无法在第一次给出完整的解决方案。;-)我绝对不会放弃这些标签,因为它们使源代码更容易阅读。