Erlang 如何将字符串划分为子字符串?

Erlang 如何将字符串划分为子字符串?,erlang,Erlang,我想根据给定的数字将字符串划分为子字符串,例如: divide("string",1) = ["s","t","r","i","n","g"]. 我试过这个,但没有成功 lists:split(1,"string") = {"s", "tring"} 有什么想法吗?你可以试试这个功能。如果数字>0小于或等于字符串长度除以2 first_substring(List, Separator) -> first_substring_loop(List, Separator, [])

我想根据给定的数字将字符串划分为子字符串,例如:

divide("string",1) = ["s","t","r","i","n","g"].
我试过这个,但没有成功

lists:split(1,"string") = {"s", "tring"}

有什么想法吗?

你可以试试这个功能。如果数字>0小于或等于字符串长度除以2

first_substring(List, Separator) ->
     first_substring_loop(List, Separator, []).

first_substring_loop([], _, Reversed_First) ->
     lists:reverse(Reversed_First);
first_substring_loop(List, Separator, Reversed_First) ->
[H|T]= my_tuple_to_list(lists:split(Separator,List)),
       first_substring_loop(lists:flatten(T), Separator, [H|Reversed_First]).

my_tuple_to_list(Tuple) -> [element(T, Tuple) || T <- lists:seq(1, tuple_size(Tuple))].

我会计算一次长度(因为这是一个缓慢的操作),然后递归地使用
lists:split/2
,直到剩下的列表小于
N

divide(List, N) ->
  divide(List, N, length(List)).

divide(List, N, Length) when Length > N ->
  {A, B} = lists:split(N, List),
  [A | divide(B, N, Length - N)];
divide(List, _, _) ->
  [List].

我认为@Dogbert解决方案是目前最好的。。。但这里有另一个递归循环的实现示例

divide_test()->
资产相等(除(“字符串”,1),[“s”、“t”、“r”、“i”、“n”、“g”),
资产质量(除(“字符串”,2),[“st”,“ri”,“ng”),
资产质量(除(“字符串”,3),[“str”,“ing”]),
资产质量(除(“字符串”,4),[“stri”,“ng”])
].
-规范除法(list(),integer())->list(list())。
除法(字符串、大小)
什么时候是列表(字符串),什么时候是整数(大小)->
除法(字符串、大小、0、[]、[])。
-规范划分(list(),integer(),integer(),list(),list())->list(list())。
除法([],u,u,Buf,Result)->
Return=[列表:反向(Buf)]++结果,
列表:反向(返回);
除法([H|T],大小,0,Buf,结果)->
除以(T,大小,1,[H]++Buf,结果);
除法([H|T]、大小、计数器、Buf、结果)->
案例计数器rem大小=:=0个
正确->
除法(T,大小,计数器+1,[H]+[],[列表:反向(Buf)]++结果);
错误->
除法(T,大小,计数器+1,[H]++Buf,结果)
结束。

简单的解决方案可以是:

divide(String, Length) -> divide(String, Length, []).
divide([], _, Acc) -> Acc;
divide(String, Length, Acc) ->
    {Res, Rest} = lists:split(min(Length, length(String)), String),
    divide(Rest, Length, Acc ++ [Res]).
对于长度为1的拆分的特定情况,也可以使用列表理解:

ListOfLetters = [[Letter] || Letter <- String].
ListOfLetters=[[Letter]| | Letter如果
length(List)
不是
分隔符的倍数,例如
第一个子字符串(“string”,4)
,则此操作失败。
divide(String, Length) -> divide(String, Length, []).
divide([], _, Acc) -> Acc;
divide(String, Length, Acc) ->
    {Res, Rest} = lists:split(min(Length, length(String)), String),
    divide(Rest, Length, Acc ++ [Res]).
ListOfLetters = [[Letter] || Letter <- String].