我有一项任务要求我为该字符串中的每个字符打印一个字符串的x次迭代。因此,如果字符串输入为"Gum"
,则应打印出来:
Gum
Gum
Gum
现在我的代码是
my $string = <>;
my $length = length($string);
print ($string x $length, "\n");
我的口红印刷了五次作为我的输出。
答案 0 :(得分:7)
由于您只是使用输入字符串,它最后仍包含换行符。这也算作一个角色。在我的系统上,它输出4 Gum\n
。
chomp($string)
将删除行结尾,但输出也会一起运行,从而导致GumGumGum\n
答案 1 :(得分:7)
那些说过你会在Windows系统的最后得到CR + LF的人是错误的。 Perl会将原生行结尾转换为任何平台上的简单换行符\n
。
无论您是在阅读终端还是从文件中阅读,都必须牢记这一点。
内置chomp
函数将从字符串变量的末尾删除行终止符。如果字符串没有以行终止符结束,则它将无效。
因此,当您键入 G u m 输入时,您将$string
设置为{{ 1}},"Gum\n"
将显示它有四个字符。
您在屏幕上看到五次次,因为第一行是您自己键入的内容。该计划印刷了以下四种。
在length
之后,chomp
只有$string
,长度为三个字符,这就是您想要的。
要在单独的行上输出,您必须在每行之后打印换行符,以便编写
"Gum"
或者
my $string = <>;
chomp $string;
my $length = length $string;
print ("$string\n" x $length);
我希望有帮助
答案 2 :(得分:0)
您的代码运行正常。请参阅:http://ideone.com/AsPFh3
可能性1:可能是您在从命令行提供输入时放置2个空格,这就是为什么长度为5,并打印5倍。这样的事情:http://ideone.com/fsvnrd
在上述情况下,my $string=<>;
会为您my $string = "gum ";
,因此长度为5。
可能性2:
另一种可能性是,如果你使用Windows,那么它将在字符串的末尾添加回车符(\r
)和新行(由于输入\n
)。因此它的长度为5.
修改:要在新行中打印:请使用以下代码。
#!/usr/bin/perl
# your code goes here
chomp(my $string=<>);
my $length = length($string);
print ("$string\n" x $length);
修改2 :要删除\r\n
,请使用以下内容:
$string=~ s/\r|\n//g;
了解详情here。
答案 3 :(得分:0)
当您插入输入并在之后按Enter键时,您不会输入&#34; Gum&#34;但是&#34;口香糖\ r \ n&#34;这是一个长度为5的字符串。你应该修剪。