Я не могу использовать Io.read_integer
поскольку это просто игнорирует все, кроме первого числа.
Я могу использовать Io.read_line
чтобы получить что-то вроде 15 14 59 86
. Как бы я разделил их на целые числа?
Javascript имеет split()
, C ++ имеет stringstream
, что-то подобное было бы идеальным.
Всего 2 ответа
Если вы используете только одно пространство, в классе {STRING}
существует метод 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
Если вы хотите разрешить несколько пробелов, вкладок и т. Д. Между целыми числами, вы можете использовать класс {ST_SPLITTER}
из библиотеки Gobo. Вот пример:
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