2016-10-21 1 views
-1

문자열을 가져 오는 펄 함수에 크게 의존하는 프로그램을 작성하고 있습니다. 이 문자열을 공백이없는 일련의 하위 문자열로 나눌 나의 목적.perl 색인이 검색 값을 건너 뜁니다.

문제는 루프의 후반부에 인덱스 함수가 ​​공백을 건너 뛰기 시작한다는 것입니다.

1 12 2 5 PQ

내가 얻을 것으로 기대하고있다 :

나는 테스트 데이터를 사용하고

(1), (12),, 2, 5 , P, Q,

대신에 :

(1), (12), 2, 5, P Q,

내 코드는 다음과 같습니다 : 미리

use 5.010; 
use strict; 
use warnings; 

my $ivalue = <stdin>; 
chomp($ivalue); 
$ivalue = $ivalue . " "; 
my $current; 
my $space = 0; 
my $safespace = 0; 
my $lastspace = 0; 
my $closestspace = 0; 
my $i = 0; 
# Test data - 1 12 a 2 5 P Q 
while ($space != -1){ 
    $space = index($ivalue, " ", $space + $i++); 
    $closestspace = $space - $lastspace;      
    #print $lastspace . " " . $space . " = " . $closestspace . "; "; 
    $current = substr($ivalue, $lastspace, $closestspace); 
    #say "substring = " . $current; 
    $lastspace = $space + 1; 
} 

감사합니다! 누구나 내가 내 질문이나 내 코드에 일반적으로 인정되는 방법을 개선하는 방법에 대한 제안이 있다면.

+0

인쇄의이 주석있다, 그래서 우리는 출력을 얻을하지 않는 모든. 최종 산출물은 무엇입니까? – toolic

+0

공백을 쉼표와 공백으로 바꾸는 경우 :'$ ivalue = ~ s///g;' – toolic

+1

무엇을 하든지간에,'index'와'substr'는 거의 틀림없이 틀린 것입니다 직업을위한 도구. –

답변

0

문제는이 라인에 있습니다

대신 $i를 사용

$space = index($ivalue, " ", $space + $i++);

는 만드는 것이 $space + 1

관련 문제