Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 对字符串加扰_Perl_Substring_Reverse - Fatal编程技术网

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