+ -
当前位置:首页 → 问答吧 → 转个贴,有兴趣的看看:)

转个贴,有兴趣的看看:)

时间:2011-07-14

来源:互联网

本帖最后由 yinyuemi 于 2011-07-14 01:25 编辑
  1. $str = "hello worlds ab abcdefgh"
  2. # 转成下面的格式输出

  3. ****
  4. ****
  5. ** *
  6. ** *
  7. ** *
  8. * *  #这行应该向右挪一个位置
  9.    *
  10.    *

  11. # 要求就是把$str的字符串全部替换为*,然后每个单词做个翻转。(上面的格式有些问题,可以运行下面我的代码看下)
复制代码
最近在学习perl,把我写的贴下,感觉还是awk的思路,请大佬们赐教!


我的代码:
  1. #!/bin/perl
  2. use strict;

  3. my $str = "hello worlds ab abcdefgh";
  4. my @a;
  5. my $q=0;
  6. my $p;
  7. my $n=0;
  8. my $v;
  9. my %o;

  10. @a=split (/ /,$str);

  11. foreach (@a){
  12.         my @w=split(/x*/,$_);
  13.         ++$q;
  14.         $p=0;
  15.         foreach (@w){
  16.                 $o{$q}{++$p}=$_;
  17.         }
  18.         $n=$n>$p?$n:$p
  19. };
  20.        
  21. for(my $i=1;$i<=$n;$i++){
  22.         for(my $j=1;$j<=$q;$j++){
  23.                 $v=(exists($o{$j}{$i})?$o{$j}{$i}:" ");
  24.                 $v=~s/\w/*/;
  25.                 print $v;
  26.         }
  27.         print "\n";
  28. }
复制代码

作者: yinyuemi   发布时间: 2011-07-14

挺好、、

作者: kgdvoso   发布时间: 2011-07-14

啥兴趣?

作者: 2gua   发布时间: 2011-07-14

回复 2gua


    瓜兄是有兴趣呢?还是有兴趣呢?呵呵!

    我只是抛砖引玉, 想看到大佬们更简洁的方法

作者: yinyuemi   发布时间: 2011-07-14

这样
  1. use 5.012;

  2. my $str = "hello worlds ab abcdefgh";

  3. $str =~ s/\w/\*/g;

  4. my @a = split /\s+/, $str;

  5. my $cond = 1;
  6. while ($cond) {
  7.     $cond = 0;  # 全部字段都结束就退出
  8.     for (@a) {
  9.         my $c = chop;
  10.         $cond = 1 if $c ne '';
  11.         print ($c eq '' ? ' ' : $c);
  12.     }
  13.     say '';
  14. }
复制代码

作者: zhlong8   发布时间: 2011-07-14

这个不是打印条形图用的吗?之前写过个不过被我干掉改用 R 生成更漂亮的图表了

作者: zhlong8   发布时间: 2011-07-14

本帖最后由 yinyuemi 于 2011-07-14 09:52 编辑

回复 zhlong8


   感谢斑竹,虽然我没有5.012 的环境,不过,这个思路绝对是值得学习的,这个while用的太帅了

作者: yinyuemi   发布时间: 2011-07-14

回复 zhlong8


    我也不懂这个是干嘛的,从别地儿看到的,就贴到这里了

作者: yinyuemi   发布时间: 2011-07-14



QUOTE:
回复  zhlong8


   感谢斑竹,虽然我没有5.012 的环境,不过,这个思路绝对是值得学习的,这个while用 ...
yinyuemi 发表于 2011-07-14 09:47




    就用了个 say ''; 打印个换行

作者: zhlong8   发布时间: 2011-07-14