如何在OCaml中获取字符串的整数部分?

时间:2016-11-09 19:53:59

标签: ocaml

我的字符串格式为A3,A5,A38 ......我只对它的整数部分感兴趣。

我想要类似的东西:

let getIntofString s = match s with
"A1" -> 1
| .. 

我该怎么做?

3 个答案:

答案 0 :(得分:2)

查看最初打开的模块中的string_of_int和标准库的sub模块中的String。这应该让你开始。

答案 1 :(得分:1)

Scanf module允许一些简单的模式匹配,而不需要进行复杂的解析。

示例:

public partial class App: Application
{
  public App()
  {
    InitializeComponent();
    MainPage = new NavigationPage(new LoginPage))
    {
      BarBackgroundColor = Color.Red,
      //BarFontSize = "Large"???
    };
  }
}

这里, $(document).ready(function() { $(this).keyup(function() { var grandTotal = 0; $("input[name='price[]']").each(function (index) { var price = $("input[name='price[]']").eq(index).val(); var qty = $("input[name='qty[]']").eq(index).val(); if( qty == ""){ output = 0; } else{ var output = parseInt(price) * parseInt(qty); } if (!isNaN(output)) { $("input[name='output[]']").eq(index).val(output); } }); }); }); 将第一个参数作为输入字符串,第二个参数作为匹配模式(let identity x = x let parseAInt s = Scanf.sscanf s "A%u" identity 表示无符号整数),第三个参数作为转换将结果解析为所需类型。由于我们在这种情况下不需要这样的转换,因此身份函数就足够了。

请注意,您可能必须处理异常(Scanf.sscanf表示模式不匹配,%u表示用完要读取的字符,或Scanf.Scan_failure表示无法将字符串转换为number)如果你不能保证这个函数的输入实际上与模式匹配(例如,因为它是由用户提供的)。

答案 2 :(得分: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".