Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

perl,cgi. помогите исправить код,пожалуйста

74K
05 сентября 2011 года
juliajulia
1 / / 05.09.2011
Ребят,помогите,кто чем может...
препод дал задание по cgi,я вроде сделала(не без помощи компитентных лиц),все вроде работает,но есть одна загвоздка....вбщем все по порядку..
______________________________________________________
[COLOR="indigo"] задание,данное преподом[/COLOR]:

Задана строка символов. Можно ли разделить строку на три части, так
чтобы из них можно было составить палиндром?
Палиндром - строка, которая пишется одинаково справа налево и слева
направо.
Написать программу, которая запрашивает строку и печатает части, на
которые предлагается делить (каждую часть своим цветом) и с
новой строки один из возможных палиндромов.
Пример (в условных обозначениях).
Строка: АЛАШШ
<red>Ш</red><green>Ш</green><blue>АЛА</blue>
ШАЛАШ
_______________________________________________________

вот что получилось: http://ulm.uni.udm.ru/~justjuliya/cgi-bin/lab2.cgi
работает с любыми словами.
но препод хитр и находчив.
он ввел полиндром ,состоящий из пробела,знакаплюс и пробела,тоесть " + "
и возникает мол "Строк, на которые рвзбивается, должно быть хотя бы две"
я ему мол чоза дела,как пробел то окрасить?:facepalm:

вбщем то и у меня к вам тот же вопрос...что мне надо добавить в код,чтобы с пробелами не было проблем,м? задание с того года хвостом в семестр этот перетащилось...

кстати,вот и код,гляньте,пожалуйста:
Код:
#!/usr/bin/perl
 
use CGI;
 
$q=new CGI;
 
$query=$q->param('string');
 
@let=split(/ */, $query);
$query=~ tr/ /*/;
$cnt1=1;
$succ=0;
 
print "Content-Type: text/html; charset=koi8-r\n\n";
 
if($q->param('submit')){
 
 
while ((($cnt1+$cnt2-1)<=length($query)) and ($succ==0)){
 
    $cnt2=1;
    $p1='';
    $p2='';
    $p3='';
 
   
    while ((($cnt1+$cnt2+1)<=length($query)) and ($succ==0)){
       
        if ($query=~ m/^(.{$cnt1})(.{$cnt2})(.*)$/){
            $pal=$1.$2.$3;
#           print lo "$1 $2 $3 $cnt1 $cnt2 $pal\n";
            if(palindr($pal)){$p1=$1;$p2=$2;$p3=$3;$rez=$pal;}
            $pal=$2.$1.$3;
#           print lo "$1 $2 $3 $cnt1 $cnt2  $pal\n";
            if(palindr($pal)){$p1=$2;$p2=$1;$p3=$3;$rez=$pal;}
            $pal=$2.$3.$1;
#           print lo "$1 $2 $3 $cnt1 $cnt2  $pal\n";
            if(palindr($pal)){$p1=$2;$p2=$3;$p3=$1;$rez=$pal;}
            $pal=$3.$1.$2;
#           print lo "$1 $2 $3 $cnt1 $cnt2  $pal\n";
            if(palindr($pal)){$p1=$3;$p2=$1;$p3=$2;$rez=$pal;}
            $pal=$3.$2.$1;
#           print lo "$1 $2 $3 $cnt1 $cnt2  $pal\n";
            if(palindr($pal)){$p1=$3;$p2=$2;$p3=$1;$rez=$pal;}
            $pal=$1.$3.$2;
#           print lo "$1 $2 $3 $cnt1 $cnt2  $pal\n";
            if(palindr($pal)){$p1=$1;$p2=$3;$p3=$2;$rez=$pal; print lo "OK!\n";}
        }
 
        $cnt2=$cnt2+1;
 
        if(!(($p1 eq '') and ($p2 eq '') and ($p3 eq ''))){$succ=1;};
        if(($p1 eq '') or ($p2 eq '') or ($p3 eq '')){$succ=0;};
#       print "p1=$p1;";
#       print "p2=$p2;";
#       print "p3=$p3;";
        if (!(spal($rez))) {$succ=0;};
         
    }
   
    $cnt1=$cnt1+1;
 
}
#close(lo);
        $p1=check($p1);
        $p2=check($p2);
        $p3=check($p3);
        $query=check($query);
        $rez=check($rez);
 
 
    if($succ){  
        print '<HTML><HEAD><meta charset=koi8-r></head><body>',
        $q->h4,'у‘“ѕЋЅ  '.check($query).' “ЅЏ¬…„Ѕ&#8776;‘”— ќЅ: '.'<br>'.
        "<font color=red>".check($p1)."   <font color=green>".check($p2)."   <font color=blue>".check($p3)."</font>".
        '<br><font color=black>'.
        'рЅћ…ќѓ“ѕЌ: '.check($rez).
        "<br></h4>",
        $q->start_form,
        $q->textfield('string'),$q->submit('submit'),
        $q->end_form,
        $q->end_html;
    }
    else{
        print '<HTML><HEAD><meta charset=koi8-r></head><body>',
        $q->h4,'у‘“ѕЋЅ  '.check($query).' ќ&#8776; “ЅЏ¬…„Ѕ&#8776;‘”— „ –Ѕћ…ќѓ“ѕЌ'.'<br>',
        $q->start_form,
        $q->textfield('string'),$q->submit('submit'),
        $q->end_form,
        $q->end_html;
    }
 
}
else{
 
    print '<HTML><HEAD><meta charset=koi8-r></head><body>',$q->start_form,
    $q->h4,'дЅќЅ ”‘“ѕЋЅ ”…Ќ„ѕћѕ„.H&#8776;ѕ¬»ѕѓ…Ќѕ “ЅЏѓ&#8776;ћ…‘Ў ”‘“ѕЋ’ ќЅ ‘“… ёЅ”‘… ‘ЅЋ,ё‘ѕ¬ў …Џ
    ќ…» Ќѕчќѕ ¬ўћѕ ”ѕ”‘Ѕ„…‘Ў –Ѕћ…ќѓ“ѕЌ.',
    $q->h4,'ч„&#8776;ѓ…‘&#8776; ”‘“ѕЋ’:',
    $q->textfield('string'),$q->submit('submit'),$q->br,
    $q->end_form,
    $q->end_html;
}
 
sub spal{
local($pal) = @_;
local($cnt);
$cnt=0;
while (($cnt<=(int(length($pal)/2)+1)) and (substr($pal,$cnt,1) eq substr($pal,length($pal)-$cnt-1,1))) {
$cnt=$cnt+1;
}
return ($cnt>int(length($pal)/2));
}
 
sub palindr{
 
local($pal) = @_;
local($cnt);
$cnt=0;
@letter=split(/ */, $pal);
while (($cnt<=(int($#letter/2)+1)) and (@letter[$cnt] eq @letter[($#letter-$cnt)])){
$cnt=$cnt+1;
}
return ($cnt>int($#letter/2));
}
 
sub check{
 
local($me)=@_;
$me=~ tr/*/ /;
$me=~ s/>/> /g;
$me=~ s/</< /g;
$me=~ s/&/& /g;
return $me;
}

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог