Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 2个字符串的所有排列和组合列表_Linux_Bash_Shell_Combinations_Permutation - Fatal编程技术网

Linux 2个字符串的所有排列和组合列表

Linux 2个字符串的所有排列和组合列表,linux,bash,shell,combinations,permutation,Linux,Bash,Shell,Combinations,Permutation,让我们说句话 qwerty 我需要在字符串之间插入句点。它也可以是任何其他角色 比如说, q.werty qw.erty qwe.rty qwer.ty qwert.y 以上为1个周期或点。因此,5个字母字符串的1个周期组合将生成5个输出。(N-1) 现在为2个周期(2个点)(仅2个示例): 等等 注意:字符串中的2个字母之间不得有2个连续点。此外,在开始字符之前和/或结束字符之后不得有句点 任何人都可以提供一个Shell脚本(sh,bash)用于上面列出所有可能的组合和排列。我尝试过谷歌搜

让我们说句话

qwerty
我需要在字符串之间插入句点。它也可以是任何其他角色

比如说,

q.werty
qw.erty
qwe.rty
qwer.ty
qwert.y
以上为1个周期或点。因此,5个字母字符串的1个周期组合将生成5个输出。(N-1)

现在为2个周期(2个点)(仅2个示例):

等等

注意:字符串中的2个字母之间不得有2个连续点。此外,在开始字符之前和/或结束字符之后不得有句点


任何人都可以提供一个Shell脚本(sh,bash)用于上面列出所有可能的组合和排列。我尝试过谷歌搜索,没有发现任何值得参考的内容


编辑:关于如何在bash shell脚本上启动此脚本的任何帮助都将非常有用…

您的难题非常有趣,下面是代码:

#!/bin/bash

t=qwerty

echo '---- one dot ----'

for (( i = 1; i < ${#t}; ++i )); do
    echo "${t:0:i}.${t:i}"
done

echo '---- two dots ----'

for (( i = 1; i < (${#t} - 1); ++i )); do
    for (( j = i + 1; j < ${#t}; ++j )); do
        echo "${t:0:i}.${t:i:j - i}.${t:j}"
    done
done

所有内容请参见。

我不会编写代码,但我可以引导您找到答案

我假设你想考虑所有可能的点数,不只是1或2,而是3, 4,…最大长度为字符串-1

对于字符串中直到最后一个字符的每个字符,有两种可能:有点或没有点。因此对于
n
字符串,有O(2^(n-1))种可能性

您可以编写一个for循环,遍历所有2^(n-1)种可能性。其中的每一个都对应于一个在字母后带有点的输出


i
成为for循环的迭代。然后有一个从1到n-1的内部
j
循环。如果
j
th位为1,则在
j
th字母后加一个点

“任何人都可以提供一个Shell脚本吗”-不。这种问题在这里不受欢迎,请仔细阅读,以便更好地理解您在这里应该问什么以及如何提问。好吧。。我为此道歉。。我真的需要知道如何开始。。。!!那么请与我们分享您的尝试。它必须是shell脚本吗?这不是Shell适合的任务类型。感谢您提供的代码。。。。顺便说一句,您已经提供了问题的两个示例的输出。。。但是其他的组合呢??我们必须使用嵌套循环并逐字符读取吗?我将检查并修改代码,看看这是否解决了我的查询。
#!/bin/bash

t=qwerty

echo '---- one dot ----'

for (( i = 1; i < ${#t}; ++i )); do
    echo "${t:0:i}.${t:i}"
done

echo '---- two dots ----'

for (( i = 1; i < (${#t} - 1); ++i )); do
    for (( j = i + 1; j < ${#t}; ++j )); do
        echo "${t:0:i}.${t:i:j - i}.${t:j}"
    done
done
---- one dot ----
q.werty
qw.erty
qwe.rty
qwer.ty
qwert.y
---- two dots ----
q.w.erty
q.we.rty
q.wer.ty
q.wert.y
qw.e.rty
qw.er.ty
qw.ert.y
qwe.r.ty
qwe.rt.y
qwer.t.y