从以空格为分隔符的整数字符串中分离出所有整数的Erlang程序

目的如题. 主函数是split_integer/1, 这里用到了Erlang提供的尾递归功能. 存储到文件me.erl中

-module(me).
-compile(export_all).

split_integer(L) ->
    L1=lists:reverse(L),
    split_integer_a([],L1,[]).
split_integer_a([],[],Result) -> Result;
split_integer_a(R1,[],Result) -> [list_to_integer(R1)|Result];
split_integer_a(R1,[H|T],Result) ->
    if
        H==32 ->
            if
                R1==[] -> split_integer_a([],T,Result);
                true   -> split_integer_a([],T,[list_to_integer(R1)|Result])
            end;
        true -> split_integer_a([H|R1],T, Result)
    end.
   

进入erlang shell:
1> c(me).
{ok,me}
2> me:split_integer("1 2  3   4    5      6789").
[1,2,3,4,5,6789]

 

练习题: 如果问题改为用空格分开的是小数和整数的混合字符串又该如何? 或者分隔符是别的呢? 动动脑筋哟 (:

 

利用Erlang标准库中string模块的tokens/2函数, 可以使得上面的任务变得非常简单.

split_integer(String,SeparatorList) ->
    lists:map(fun(SubString)->list_to_integer(SubString) end, string:tokens(String,SeparatorList)).

你可能感兴趣的:(erlang,shell,String,list,Integer,fun)