84 votes

inverser l'ordre des caractères dans une chaîne de caractères

Chaîne d'entrée "12345", chaîne de sortie "54321". De préférence sans outils tiers et sans regex.

191voto

MadHatter Points 1868

Je sais que vous avez dit "sans outils tiers", mais parfois un outil est tout simplement trop évident pour être le bon, et en plus il est installé par défaut sur la plupart des systèmes linux :

[madhatta@risby tmp]$ echo 12345|rev
54321

34voto

Simple :

var="12345"
copy=${var}

len=${#copy}
for((i=$len-1;i>=0;i--)); do rev="$rev${copy:$i:1}"; done

echo "var: $var, rev: $rev"

Sortie :

$ bash rev
var: 12345, rev: 54321

16voto

Nick Points 61

Supposons qu'une variable 'var' ait la valeur '123'.

var="123"

Inversez la chaîne et stockez-la dans une nouvelle variable 'rav' :

rav=$(echo $var | rev)

Vous verrez que 'rav' a la valeur de '321' en utilisant echo.

echo $rav

13voto

Lri Points 8342

rev | tail -r (BSD) ou rev | tac (GNU) inversent également les lignes :

$ rev <<< $'12\n34' | tail -r
43
21
$ rev <<< $'12\n34' | gtac
43
21

Si LC_CTYPE est C, rev inverse les octets des caractères multi-octets :

$ LC_CTYPE=C rev <<< 

$ export LC_ALL=C; LC_ALL=en_US.UTF-8 rev <<<

9voto

Une solution bash améliorant la réponse de @osdyng (mon édition n'a pas été acceptée) :

var="12345"     rev=""

for(( i=0 ; i<${#var} ; i++ )); do rev="${var:i:1}$rev"; done

echo "var: $var, rev: $rev"

Ou une boucle (bash) encore plus simple :

var=$1   len="${#var}"   i=0   rev=""

while (( i<len )); do rev="${var:i++:1}$rev"; done

echo "var: $var, rev: $rev"

Une solution POSIX :

var="12345"     rev=""    i=1

while  [ "$i" -le "${#var}" ]
do     rev="$(echo "$var" | awk -v i="$i" '{print(substr($0,i,1))}')$rev"
       : $(( i+=1 ))
done

echo "var: $var, rev: $rev"

Note : Ceci fonctionne sur des chaînes de caractères de plusieurs octets. Les solutions de coupure ne fonctionnent que sur les chaînes ASCII (1 octet).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X