如何根据另一个给定字符串的长度生成一个字符串?

时间:2016-10-25 11:13:56

标签: erlang

我正在尝试根据另一个给定字符串的长度生成一个字符串。 我的代码是:

generate(S1,S2)->
LenString1 = length(S1),
LenString2 = length(S2),
L = LenString1 div LenString2,
lists:flatten(lists:duplicate(L,S2)).

但是这种情况不起作用:

generate("Some", "Key") 

generate("Generate","Key")

我需要的结果是:

KeyK 

KeyKeyKe

谢谢

2 个答案:

答案 0 :(得分:3)

您还需要获取前flatten个字符并将其附加到generate(S1, S2)-> LenString1 = length(S1), LenString2 = length(S2), L = LenString1 div LenString2, Extra = LenString1 rem LenString2, lists:flatten(lists:duplicate(L, S2)) ++ lists:sublist(S2, Extra). 的结果:

1> a:generate("Some", "Key").
"KeyK"
2> a:generate("Generate", "Key").
"KeyKeyKe"
CREATE UNIQUE INDEX unq_persons_pid_lastname ON PERSONS(P_Id, LastName);

答案 1 :(得分:3)

为什么这么复杂?

generate(S1, S2) ->
    generate(S2, S1, S2).

generate(S2, [_|_] = S1, []) ->
    generate(S2, S1, S2);
generate(S2, [_|S1], [H|T]) ->
    [H | generate(S2, S1, T)];
generate(S2, [], _) when is_list(S2) -> [];
generate(_, _, _) -> error(badarg).