2016-11-09 2 views

ответ

2

Взгляните на string_of_int с первоначально открытого модуля и на sub из модуля библиотеки String стандартной библиотеки. Это должно заставить вас начать.

+0

Да, это, возможно, то, что мне нужно. Я не знаю длину строки (так как она может иметь 1 номер или даже 3, например A5 и A157), но вместе с длиной, которую я вытащил. Спасибо –

0

Вы должны использовать 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". 
+0

Да, это то, что мне нужно. Большое спасибо –

1

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 за то, что не может преобразовать строку в число), если вы не можете гарантировать, что вход в этот функция фактически соответствует шаблону (например, поскольку он был предоставлен пользователем).

Смежные вопросы