Как сделать циклический сдвиг строк в ударе?

У меня есть присвоение домашней работы, где я должен взять вход из файла и непрерывно удалять первое слово в строке и добавлять его в конец строки, пока все комбинации не были сделаны.

Я действительно не знаю, где начать и был бы благодарен за любой вид направления.

Часть, которая имеет меня перепутанный, - то, что это, предполагают, чтобы быть выполненным без использования массивов. Я только ищу кого-то для решения проблемы для меня, я просто ищу некоторое направление.

SAMPlE ВВОДЯТ:

Pipes and Filters
Java Swing
Software Requirements Analysis

ДЕМОНСТРАЦИОННЫЙ ВЫВОД:

Analysis Software Requirements
Filters Pipes and
Java Swing
Pipes and Filters
Requirements Analysis Software
Software Requirements Analysis
Swing Java
6
задан Bhargav Rao 25 December 2018 в 05:41
поделиться

4 ответа

Несколько лакомых кусочков, которые должны помочь: когда вы вызываете функцию со строкой, строка разбивается на несколько аргументов ( позиционные параметры , названные $ n , где n - целые числа, начинающиеся с 1) в символах в переменной $ IFS (по умолчанию используются пробелы, символы табуляции и новые строки)

function first() {
    echo $1
}
first one two three
# outputs: "one"

$ * и $ @ предоставит вам все позиционные параметры по порядку.

Во-вторых, специальная переменная $ # содержит количество аргументов функции.

В-третьих, shift отбрасывает первый позиционный параметр и перемещает все остальные на единицу вверх.

function tail() {
    shift
    echo $*
}

В-четвертых, вы можете записывать вывод команд и функций, используя `...` или $ (...)

rest=`tail $*`

В-пятых, вы можете отправить вывод одной команды на вход другой, использующий вертикальную черту ( | ):

seq 5 | sort
6
ответ дан 9 December 2019 в 20:41
поделиться

это короткая демонстрация. Просмотрите слова, найдите последнее слово и поставьте перед строкой. пока последняя строка не станет такой же, как оригинал.

    #!/bin/bash    
    s="Software Requirements Analysis"
    org="$s"
    while true
    do
       last=${s##* } #Analysis
       front=${s% *} #Software Requirements
       s="$last $front"
       echo $s
       case "$s" in
         "$org") break;;
       esac
    done

вы сможете сделать все остальное с помощью файла.

0
ответ дан 9 December 2019 в 20:41
поделиться

Расширение параметра позволит вам вырезать части переменной.

0
ответ дан 9 December 2019 в 20:41
поделиться

Для начала ознакомьтесь со встроенной функцией read :

while read first_word rest_of_the_line; do
    ... your code here ...
done

Вам также понадобится способ передать свой входной файл в этот петля.

3
ответ дан 9 December 2019 в 20:41
поделиться