Perl 对字符串加扰
我使用子字符串和反转来对字符串进行置乱。但我的解决方案写起来很枯燥,必须有一个更流畅的方法。据称,这应该能够工作,只有两个变量使用子字符串和反向?但是怎么做呢?子字符串只删除我想要的字母,并丢弃字符串的其余部分。感谢您的任何意见Perl 对字符串加扰,perl,substring,reverse,Perl,Substring,Reverse,我使用子字符串和反转来对字符串进行置乱。但我的解决方案写起来很枯燥,必须有一个更流畅的方法。据称,这应该能够工作,只有两个变量使用子字符串和反向?但是怎么做呢?子字符串只删除我想要的字母,并丢弃字符串的其余部分。感谢您的任何意见 #!/usr/bin/perl $string = mystring; $name = substr($string, 0, 2); $name = reverse($name); $name1 = substr($string, 2, 4); $name2 = sub
#!/usr/bin/perl
$string = mystring;
$name = substr($string, 0, 2);
$name = reverse($name);
$name1 = substr($string, 2, 4);
$name2 = substr($string, 6, 8);
$name2 = reverse($name2);
print uc($name);
print uc($name1);
print uc($name2);
我会:
my $string = 'mystring';
$string =~ s/^(..)(....)(.+)$/reverse($1) . $2 . reverse($3)/e;
print uc($string),"\n";
输出:
YMSTRIGN
我们用颠倒的前两个字符替换原始字符串,以下4个字符保持原样,其余字符也颠倒过来。您可以从中使用函数
输出:
YMS RTNI GSIA G OO DTSIRGN
谢谢,你能解释一下这里发生了什么吗?
{1,}
通常是写在这里的+
你想在这里写什么?substr
的第三个参数是子字符串的长度,因此substr($string,6,8)
要求使用第七到第十四个字符,但字符串长度只有八个字符,实际上就像您使用的解决方案一样。我个人可能会多用几行来让事情更清楚,但是shuffle
对你正在做的事情是不言自明的。我认为否决票的产生是因为OP声明他们想要使用substr
和reverse
@DavidW。关于substr
和reverse
,我从一个角度来看,只要字符串被洗牌,实现就不重要。OP要求“一种更平滑的方法”。他们还说“据称,这应该能够只使用子字符串和反转来处理两个变量?但如何?”。你怎么能认为他们只是想把绳子弄乱?你建议使用shuffle的建议是不可逆转的,因此你不妨写my$shuffled\u string='abcdefgh'
OP的初始帖子不清楚。OP从未回复他们帖子上的任何问题。也许OP是在制造一个单词混乱。也许这是个家庭作业。也许字符串必须以特定的方式或使用特定的命令进行置乱。我们不知道。使用名为shuffle
的命令对字符串进行置乱是一个优雅的解决方案。使用现成的Perl模块(以及标准模块)甚至更好。我们只是不知道它是否符合OP的标准。@Borodin这个标题是我实现这个功能的原因。如果有任何迹象表明这个过程是可逆的,那么我的解决方案就不同了。正如David W提到的,如果没有原始海报的反馈,很难确定需要什么。
#!/usr/bin/env perl
use strict;
use warnings;
my $string = 'My string is a good string';
for my $i (0 .. length($string)/2) {
substr($string, $i * 2, 2) = uc reverse substr($string, $i * 2, 2);
}
print "$string\n";
YMS RTNI GSIA G OO DTSIRGN