如何在perl中的数字字符串中添加数字

时间:2013-01-15 20:25:39

标签: perl

在数字字符串中添加值时,我遇到了一些问题:

我的字符串看起来像02:03:05:07:04:06。所有数字必须<10。现在,我必须从1-9中取一个随机数,并将该数字与字符串的最后位置编号(例如3)相加。

我总和> 10,然后我将该数字添加到倒数第二个位置的数字。

到目前为止,我有

#!/usr/bin/perl -w
use strict;
my $str='02:03:05:07:04:06';
my @arr=split(/:/,$str);
my @new_arr=pop(@arr);
my $rand_val=int(rand(9));
my $val=$new_arr[0]+$rand_val;
if($val>=10)
{
   I am unable to generate a logic here:(

}

请帮我解决这个问题。

添加号码后,我们必须加入字符串并打印它:)

4 个答案:

答案 0 :(得分:1)

my $str = '02:03:05:07:04:06';
my @nums = split /:/, $str;
my $add = int(rand(9)) + 1;
my $overflow = 1;
for (1..@nums) {
   if ($num[-$_] + $add < 10) {
      $num[-$_] += $add;
      $overflow = 0;
      last;
   }
}

die "Overflow" if $overflow;

$str = join ':', map sprintf('%02d', $_), @nums;

答案 1 :(得分:0)

我只是运行它,它的工作原理。需要注意的是,字符串的最后一个数字越小,“if($ val&gt; = 10)”有效的可能性就越小

答案 2 :(得分:0)

这并不能解决你的rand_val可能为0的问题,但我会把它作为你要解决的任务。这应该为您提供了遍历数组中值的所需内容,直到数组中随机值和当前最后一个值的总和为止。

1  use strict;
2  my $str='02:03:05:07:04:06';
3  my @arr=split(/:/,$str);
4  my $rand_val=int(rand(9));
5  my $val;
6 
7  foreach my $i (reverse @arr){
8    $val = $i + $rand_val;
9    next if ($val >= 10);
10   print "val: $val, rand_val: $rand_val, value_used: $i\n";
11   last if ($val < 10);
12 }

答案 3 :(得分:-1)

我看到了一个错误:你做了

my @new_arr=pop(@arr);
(...)
my $val=$new_arr[0]+$rand_val;

pop仅返回最后一个元素,而不是列表。