做网站的团队业绩怎么写,昆明做网站的公司,国内做网站公司哪家好,现在去横琴会变黄码吗给定一个字符串#xff0c;如何反向(倒序)输出#xff1f;
字符串反转的方法#xff1a;a.对各个字符位置进行循环调换#xff08;从原字符串左边取出放在新字符串的右边#xff1b;从原字符串右边取出放在新字符串的左边#xff09;。b.对各个字符由水平排列转为垂直排…给定一个字符串如何反向(倒序)输出
字符串反转的方法a.对各个字符位置进行循环调换从原字符串左边取出放在新字符串的右边从原字符串右边取出放在新字符串的左边。b.对各个字符由水平排列转为垂直排列行变列tac反转再由垂直排列转为水平排列列变行。
由行变列的方法有grep、sed、awk、xargs等。由列变行主要有sed、awk、tr等。
xargs只能把空格分隔的行转为列。可以通过sed、awk等方法为字符串各字符间添加空格。
训练项目很简单解决方法也很多我们共同讨论。
一、rev命令
该命令接受文件作参数也接受标准输入。
1.基本语法
命令格式 rev [OPTION] [FILE...]
如果没有指定文件则读取标准输入。
选项说明
-V, --version显示版本信息并退出
-h, --help显示帮助信息并退出
标准输入格式 echo string |rev
rev命令将文件中的每行内容以字符为单位反序输出即第一个字符最后输出最后一个字符最先输出依次类推。
与其他命令结合时表示将其收到的其他命令执行的结果以字符串为单位进行倒序输出。
2.常用示例
给定文件rev_ test.txt 用于测试内容如下 abcde 12345
a.来自文件
反序显示文件的每行内容 rev rev_test.txt edeba 54321
b.来自标准输入
反序显示从标准输入读取的内容 rev hello olleh
每输入一行内容后键入回车将显示反序后的内容
键入 Ctrl d 结束输入 标准输入的另一写法 rev $12345 rev 12345 二、变量应用
把给定字符串定义为一个变量利用其特性反向输出 varABCD;len${#var};for((i$len;i0;i--)); do echo -e ${var:$i:1}\c;done;echo
len${#var} # 获取字符串长度
echo -e ${var:$i:1}\c中-e是开启转义 \c取消echo的换行 三、sed命令
1.替换字符间分隔符
把每个字符后添加一个换行符通过tac反转再把多行转为单行不能有空格 PS:
a.应用sed为字符串间添加空格 sed s/./ /g filename
b.应用sed把字符串转行为列 sed s/./\n/g filename
c.应用sed把字符串转列为行 sed :a;$!N;s/\n//g;ba filename sed :a;N;s/\n//g;ta filename
2.分组反向引用 echo ABC|sed s/\(.\)\(.\)\(.\)\/\3\2\1/g echo ABC|sed -r s/(.)(.)(.)/\3\2\1/
(.) 正则表达式中的分组匹配匹配之后再用具体位置参数 \4\3\2\1来实现反转
-r 使用-r参数表示扩展正则表达式就不用使用\来进行转义
3.普通方法
a.应用G D s echo 123456789|sed -r /\n/!G;s/(.)(.*\n)/\2\1/;//D;s/.// b.应用x H s echo 123456|sed $s/./\\\n/g | sed -ne $x;H;${x;s/\\n//g;p;}
工作原理是首先将输入字符串分成每个字符一行然后将每个字符插入保持缓冲区的开头。
x交换保持空间和模式空间并且 H将当前模式空间附加到保持空间。
因此对于每个角色我们将该角色放入保持空间然后将旧的保持空间附加到其中从而反转输入。最后一个命令删除换行符以重建原始字符串。 c.应用 G h s echo abcdefgh|sed s/./\n/g|sed -n $1!G;h;$!d;s/\\n//g;p
熟悉应用sed命令使用文件倒序输出的对此命令较易理解。参考文章linux centos7文件倒序与功能实现 不加-n选项不加p操作 四、awk命令
1.设置分隔符方法
通过设置内置变量FS、OFS及ORS达到反向输出 2.应用子串截取方法 echo ABCD|awk {for(i1;ilength;i) {linesubstr($0,i,1) line}} END{print line} a.substr($0,i,1)表示取当前字符从索引i开始取当前位 b.length 为当前字符串的长度 c.linesubstr($0,i,1) line将三个值分别保存在内存栈中 3.设置分隔符方法 echo dsfedw | awk BEGIN{FS }{for(i NF; i 1; i--) {printf(%s, $i)}{printf(\n)}} wdefsd ## 反向输出 五、常用命令组合
把常用命令进行简单的组合可以达到反转字符串。
各种命令组合将产生较多方法我们仅介绍一部分。
1.grep echo !!!esreveR si sihT | grep -o . | tac | tr -d \n ; echo 2.fold echo !!!esreveR si sihT|fold -w 1|tac|tr -d \n;echo 3.xxd
转换为十六进制值然后反转 echo !!!esreveR si sihT | xxd -p | grep -o .. | tac | xxd -r -p echo 4.tr tr命令可以设置选项-d \n。 六、Python
echo ABCD|python -c print raw_input()[::-1]
1.[::-1] 实现字符串的反转
2.-c commond 表示运行时以命令性字符串提交python脚本
3.raw_input() 将管道传过来的值作为字符串输入 七、perl
echo ABCD | perl -nle print scalar reverse $_
1.print scalar reverse $_ 将管道传过来的字符串传到默认标量$_再用reverse取反
2.-e让Perl程序可以在Perl命令行中运行比如: perl -e print Hello,World!\n
3.-n增加了循环功能可以一行行处理文本
4.-l用来给每行增加一个换行符\n 八、bash实现
linux 中bash实现字符串的反向输出方法很多仅介绍部分。
1. 字符右切片方法
#!/bin/bash
#guo 2023.8.26
#使用read读入一段字符串最后以倒序的方式打印出这一段字符串
echo -e \e[33;1mQuit program when input is empty.\e[m # 前面的“\e[331m”和后面的“\e[m”为一组设置文字颜色
while :
do read -p Please input a string: str if [ $str ];then # 当什么都不输的时候则退出程序 echo bye~ exit fi len${#str} # 获得输入的字符长度 res # 清空字符串变量 for ((i$len;i0;i--)) do res$res${str:$i:1} # 利用字符切片从后往前一次取出一个字符并连接 done echo $res
done
本方法是利用字符切片从后往前依次取出一个字符并组合成一新的字符串。最后直接输出这个新的字符串。 2.字符左切片方法
#!/bin/bash
#guo 2023.8.26
#使用read读入一段字符串最后以倒序的方式打印
echo -e \033[32;1mPlease enter q to exit the program.\033[m
var12345
rev
for (( i0 ; i${#var} ; i )); do rev${var:i:1}$rev; done
echo var: $var, rev: $rev 3.REPLY方法 echo ABCD | { read; for((i${#REPLY};i0;i--)) do echo -n ${REPLY:i-1:1};done;echo; } 本方法未提前设置变量直接利用REPLY处理已将变量的值从标准输入读到REPLY。
$REPLY:当没有参数变量提供给read命令的时候这个变量会作为默认变量提供给read命令。
小结
字符串反向输出是每一种高级语言都涉及到的重要操作。这是检验高级语言处理基本问题的常用功能是否健壮,处理手法是否灵活多样。
一个简单的字符串反向输出关注的知识点包括循环结构、分支结构,从此案例引导的命令学习是对grep、sed、awk、tr、tac和变量的深入理解与灵活应用。