Моя строка имеет формат A3, A5, A38 ... и меня интересует только ее целочисленная часть.Как получить целую часть строки в OCaml?
Я хочу что-то вроде:
let getIntofString s = match s with
"A1" -> 1
| ..
Как мне это сделать?
Моя строка имеет формат A3, A5, A38 ... и меня интересует только ее целочисленная часть.Как получить целую часть строки в OCaml?
Я хочу что-то вроде:
let getIntofString s = match s with
"A1" -> 1
| ..
Как мне это сделать?
Взгляните на string_of_int
с первоначально открытого модуля и на sub
из модуля библиотеки String
стандартной библиотеки. Это должно заставить вас начать.
Вы должны использовать sub, length и int_of_string.
open String
let getIntofString s =
let l=length s in
let si=sub s 1 (l-1) in
int_of_string si
;;
Тест
# getIntofString "A18";; - : int = 18 # getIntofString "A";; Exception: Failure "int_of_string". # getIntofString "";; Exception: Invalid_argument "String.sub/Bytes.sub".
Да, это то, что мне нужно. Большое спасибо –
Scanf module позволяет для некоторого простого сопоставления с образцом, где не требуется сложный синтаксический анализ.
Пример:
let identity x = x
let parseAInt s =
Scanf.sscanf s "A%u" identity
Здесь Scanf.sscanf
принимает в качестве своего первого аргумента строку ввода, в качестве второго аргумента шаблона к сопоставлению (%u
, обозначающее целое число без знака), а в качестве третьего аргумента функции, что преобразует проанализированные результаты в необходимый тип. Поскольку в этом случае нам не нужно такое преобразование, здесь здесь достаточно функции тождества.
Обратите внимание, что вы, возможно, придется обрабатывать исключения (Scanf.Scan_failure
несовпадающих рисунка, End_of_file
для запуска из символов читать, или Failure
за то, что не может преобразовать строку в число), если вы не можете гарантировать, что вход в этот функция фактически соответствует шаблону (например, поскольку он был предоставлен пользователем).
Да, это, возможно, то, что мне нужно. Я не знаю длину строки (так как она может иметь 1 номер или даже 3, например A5 и A157), но вместе с длиной, которую я вытащил. Спасибо –