Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Посимвольная обработка строк 
V
    Опции темы
qw1mb0
Дата 30.9.2011, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Непутевый студент
*


Профиль
Группа: Участник
Сообщений: 79
Регистрация: 24.4.2010
Где: Севастополь

Репутация: нет
Всего: нет



Добрый день уважаемые форумчане.
Хотел бы задать вопрос. 
Перед мной стоит задача в подробности которой я вдаваться не буду, но не могу придумать как реализовать 1 функцию.
Например на вход подается строка a*a$
И я разбираю строку посимвольно, с помощью split.
Допустим если "а"(буква) то выводиться 1 сообщение, если "*"(символ), то другое и в таком духе.

split разбивает строку на массив символов.
А есть такое условие, если допустим будет строка aa*a$, то увидев "аа" должно вывести другое сообщение. 
Как можно разбить строку так, что бы он сначала детектил повторяющиеся символы, а потом уже разбивал на массив.

Заранее спасибо за помощь.
PM MAIL ICQ Skype   Вверх
ginnie
Дата 30.9.2011, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



qw1mb0, Вам это нужно?

Код

perl -e 'my $str = "aa*a\$"; while($str =~ /((.)\2*)/g) {warn $1}'



--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
qw1mb0
Дата 30.9.2011, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Непутевый студент
*


Профиль
Группа: Участник
Сообщений: 79
Регистрация: 24.4.2010
Где: Севастополь

Репутация: нет
Всего: нет



ginnie, 
Впринципе да, но что-то у меня руки совсем кривые....

Вообщем более углубленно.
Я пока сам додумался только до глобальной замены вида:
Код

chomp (@n=<STDIN>);
for (@n){
if (s/\d\2*/\!/g){}
if(s/\w\2*/\?/g){}
}


Где дальше полученная строка будет разбиваться split'ом и там поиск по шаблону, если 1 буква то 1 сообщение, если 1 цифра то другое, если ! (соответствует 2 и более цифрам) третье и если ?(2 и более буквам) четвертое:
Код

@b=split (//,@n);
for (@b){.....}


Но что-то не так... Подскажите пожалуйста в чем может быть ошибка
PM MAIL ICQ Skype   Вверх
ginnie
Дата 30.9.2011, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



qw1mb0, попробуйте так

Код

while (my $line = <STDIN>) {
    push(@b, $1) while ($line =~ /(([^\r\n])\2*)/g);
}



--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
tishaishii
Дата 30.9.2011, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: 4
Всего: 8



perl -n

Код
BEGIN {
    ($,, $\, $|, %MSG)=(
        ("\n") x 2, 1, 
        'a'    =>'message 1',
        '*'    =>'message 2',
        'aa'    =>'message 3'
    );
    $RX=join '|', map quotemeta, sort length($b)<=>length($a), keys %MSG
}

print @MSG{/$RX/gsx}


Например:
Код

BEGIN {
    ($,, $\, $|, %MSG)=(
        ("\n") x 2, 1, 
        'a'    =>'message 1',
        '*'    =>'message 2',
        'aa'    =>'message 3'
    );
    $RX=join '|', map quotemeta, sort length($b)<=>length($a), keys %MSG
}

print @MSG{<<''=~/$RX/gsx};
a*babaaa*a

+1


Это сообщение отредактировал(а) tishaishii - 30.9.2011, 21:26
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0419 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.