Палиндром с использованием сценариев оболочки - PullRequest
0 голосов
/ 07 ноября 2019

Я пытался написать код для проверки строки, если это палидром, но не знаю, где я ошибаюсь

read a
len=`echo $a|wc -m`
len=`expr $len - 1`
# echo $len
flag=1
for((i=0;i<len/2;i++))
do
    k=`expr $len - $i - 1`
    # echo "${a:$i:1} ${a:$k:1}"
    if((${a:$i:1} != ${a:$k:1}))
    then    
        flag=0 
        break
    fi

done

if(($flag == 1))
then
    echo Palindrome
else
    echo Not Palindrome
fi

1 Ответ

1 голос
/ 08 ноября 2019

Ваша основная проблема в том, что вы использовали ((..)) вместо [[ .. ]] для сравнения строк (интервал имеет значение в последнем).

  • Вы можете получить длину непосредственно с помощью ${#a}.
  • Ваш алгоритм начинается с обоих концов, а затем увеличивается / уменьшается к середине. Таким образом, вы можете получить flag неявно - если вы пройдете среднюю точку, строка будет палиндромом.
  • Вы можете заменить любое использование expr на (( .. )).
  • for ((..))позволяет инициализировать / обновлять несколько переменных.
read a

for (( i=0, k=${#a}-1; i<=k; i++, k-- ))
do
    [[ ${a:$i:1} != ${a:$k:1} ]] && break
done

if (( i>k ))
then
    echo Palindrome
else
    echo Not Palindrome
fi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...