Неожиданное поведение при чтении параметров из стандартного ввода - PullRequest
0 голосов
/ 31 января 2020
sub Solution{
    $matchflag=0;
    $occurence=0;

    #OUPTUT [uncomment & modify if required]
    my $ind=index($m,$p);


    if ($ind!=-1){
       $matchflag=1;
    }

    $occurence= () = $m =~ /$q/g;


    print("$matchflag\n");
    print($occurence);
}

#INPUT [uncomment & modify if required]
$n=<STDIN>;
$m=<STDIN>;
$p=<STDIN>;
$q=<STDIN>;


Solution();

Здравствуйте, может кто-нибудь сказать мне, что не так с этим кодом? Это дает мне следующий вывод:

6
naman
nam
n
0
1

Ясно, что 0 должно быть 1, потому что nam существует в строке naman. а также 1 должно быть 2, так как n встречается дважды в строке.

Что не так с этим кодом?

Ответы [ 2 ]

5 голосов
/ 31 января 2020

Когда вы читаете из <STDIN>, вам нужно удалить \n символ новой строки в конце строки,

chomp for
    $n=<STDIN>,
    $m=<STDIN>,
    $p=<STDIN>,
    $q=<STDIN>,
;

Возможно, вы также захотите рассмотреть вопрос о лучшей области видимости, используя my лексические выражения вместо глобальные переменные и некоторые проверки, облегчающие жизнь, например use strict; use warnings;

0 голосов
/ 01 февраля 2020

OP, вероятно, означало, что код будет следующим:

use strict;
use warnings;

my $n = input();
my $m = input();
my $p = input();
my $q = input();

Solution();

sub input{
    my $input = <STDIN>;

    chomp $input;

    return $input;
}

sub Solution{
    my $matchflag=0;
    my $occurence=0;

    #OUPTUT [uncomment & modify if required]
    my $ind=index($m,$p);


    if ($ind!=-1){
       $matchflag=1;
    }

    $occurence= () = $m =~ /$q/g;


    print("Match flag: $matchflag\n");
    print("Ocurance:   $occurence\n");
}

Вывод

6
naman
nam
n
Match flag: 1
Ocurance:   2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...