Ada 读取一个字符串(相当于 scanf %s)
Ada read a string (scanf %s equivalent)
如何在 C 中读取类似于 scanf("%s")
的单词(跳过空格并读取字符直到遇到空格)?
Skip_Leading_Space:
loop
Next := Ada.Text_IO.Get;
exit when not Next in Whitespace;
end loop Skip_Leading_Space;
Read_Word:
loop
Word := Word & Next;
Next := Ada.Text_IO.Get;
exit when Next in Whitespace;
end loop Read_Word;
正在从标准输入中读取一个单词。写成一个函数。 (未经测试。)
function Next_Word return String is
package Latin_1 renames Ada.Characters.Latin_1;
subtype Whitespace is Character
with Static_Predicate => Whitespace in ' ' | Latin_1.HT;
use all type Ada.Strings.Unbounded.Unbounded_String;
Word : Ada.Strings.Unbounded.Unbounded_String;
Next : Character;
begin
Skip_Leading_Space:
loop
Ada.Text_IO.Get (Next);
exit when not (Next in Whitespace);
end loop Skip_Leading_Space;
Read_Word:
loop
Word := Word & Next;
Ada.Text_IO.Get (Next);
exit when Next in Whitespace;
end loop Read_Word;
return To_String (Word);
end Next_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;
如何在 C 中读取类似于 scanf("%s")
的单词(跳过空格并读取字符直到遇到空格)?
Skip_Leading_Space:
loop
Next := Ada.Text_IO.Get;
exit when not Next in Whitespace;
end loop Skip_Leading_Space;
Read_Word:
loop
Word := Word & Next;
Next := Ada.Text_IO.Get;
exit when Next in Whitespace;
end loop Read_Word;
正在从标准输入中读取一个单词。写成一个函数。 (未经测试。)
function Next_Word return String is
package Latin_1 renames Ada.Characters.Latin_1;
subtype Whitespace is Character
with Static_Predicate => Whitespace in ' ' | Latin_1.HT;
use all type Ada.Strings.Unbounded.Unbounded_String;
Word : Ada.Strings.Unbounded.Unbounded_String;
Next : Character;
begin
Skip_Leading_Space:
loop
Ada.Text_IO.Get (Next);
exit when not (Next in Whitespace);
end loop Skip_Leading_Space;
Read_Word:
loop
Word := Word & Next;
Ada.Text_IO.Get (Next);
exit when Next in Whitespace;
end loop Read_Word;
return To_String (Word);
end Next_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;