如何阅读 Eiffel 中的 space 分隔输入?
How would one read space separated input in Eiffel?
我不能真正使用 Io.read_integer
因为它会忽略除了
第一个数字。
我可以使用 Io.read_line
得到类似 15 14 59 86
的东西。
我现在如何将它们拆分成整数?
Javascript 有 split()
,C++ 有 stringstream
,类似的东西是理想的。
如果只使用一个space,{STRING}
class中有一个split
方法。 split
方法的参数是 {CHARACTER}
而不是 {STRING}
。所以,你必须使用 ' '
而不是 " "
。这是一个小功能,可以满足您的需求。
split_to_integer_list(a_string:STRING):ARRAYED_LIST[INTEGER]
-- Convert `a_string', a space separated list of integer
-- into a {LIST} of {INTEGER}
local
l_split:LIST[STRING]
do
l_split := a_string.split (' ')
create Result.make (a_string.count)
across l_split as la_split loop
if la_split.item.is_integer then
Result.extend(la_split.item.to_integer)
end
end
end
如果您想在整数之间允许多个空格、制表符等,您可以使用 Gobo 库中的 class {ST_SPLITTER}
。这是一个例子:
local
l_line: STRING
l_splitter: ST_SPLITTER
l_list: DS_LINKED_LIST [INTEGER]
do
io.read_line
l_line := io.last_string
create l_list.make
create l_splitter.make_with_separators (" %T")
across l_splitter.split (l_line) as l_split loop
if l_split.item.is_integer then
l_list.put_last (l_split.item.to_integer)
end
end
我不能真正使用 Io.read_integer
因为它会忽略除了
第一个数字。
我可以使用 Io.read_line
得到类似 15 14 59 86
的东西。
我现在如何将它们拆分成整数?
Javascript 有 split()
,C++ 有 stringstream
,类似的东西是理想的。
如果只使用一个space,{STRING}
class中有一个split
方法。 split
方法的参数是 {CHARACTER}
而不是 {STRING}
。所以,你必须使用 ' '
而不是 " "
。这是一个小功能,可以满足您的需求。
split_to_integer_list(a_string:STRING):ARRAYED_LIST[INTEGER]
-- Convert `a_string', a space separated list of integer
-- into a {LIST} of {INTEGER}
local
l_split:LIST[STRING]
do
l_split := a_string.split (' ')
create Result.make (a_string.count)
across l_split as la_split loop
if la_split.item.is_integer then
Result.extend(la_split.item.to_integer)
end
end
end
如果您想在整数之间允许多个空格、制表符等,您可以使用 Gobo 库中的 class {ST_SPLITTER}
。这是一个例子:
local
l_line: STRING
l_splitter: ST_SPLITTER
l_list: DS_LINKED_LIST [INTEGER]
do
io.read_line
l_line := io.last_string
create l_list.make
create l_splitter.make_with_separators (" %T")
across l_splitter.split (l_line) as l_split loop
if l_split.item.is_integer then
l_list.put_last (l_split.item.to_integer)
end
end