找到一个带字符索引的子字符串

时间:2012-10-15 08:19:20

标签: string perl join

  

可能重复:
  How to join two substrings in perl

我怎样才能找到与用户输入的字符索引相对应的字符串数组的子字符串?

例如:如果有一个字符串$string = 'MFHYRAKCLAMSCTLPHCAKNDHGCTH';,如果用户输入@string = ( "MFHYRA","KCLAM", "SCTLP", "HCAKNDHGCTH" ) ;的位置为6和10,它就会被分解为数组A,如何搜索两个相应的子字符串并加入了?

1 个答案:

答案 0 :(得分:1)

基本上,你问的是:我们在初始字符串中有一个位置。字符串在子字符串中分开。在哪个子串中是位置?

假设

@pos = ( 5, 7, 9 ) ;

是您要查找子字符串的位置列表。

my $n = 0 ; # current position

my %results ;
foreach my $ss ( @substrings ) {

  $n += length( $ss ) ;

  foreach my $p ( @pos ) {
    if( ! $results{$p} and $p < $n ) { $results{$p} = $ss ; }
  }

}

foreach my $p ( @pos ) {
  print "Position $p, substring $results{$p}\n" ;
}

显然,这段代码可以使用一些优化,例如 - 如果我们已经有了它们的子字符串,则不需要遍历@pos的元素,我们应该在{的最后一个元素之后中断操作{1}}得到了它的子串,但是对于为用户输入的几个位置,这并不重要。