Re[2]: Работа со строками.
От: Chipsеt Россия http://merlinko.com
Дата: 28.02.06 19:36
Оценка: +1
Здравствуйте, Константин Ленин, Вы писали:

КЛ>Здравствуйте, xEvgeNx, Вы писали:


EN>>Подскажите!!


EN>>Нужно в строке заменить слова оканчивающиеся на ing на ed . .


КЛ>здесь


Чисто моё имхо, лишнюю библиотеку (тем более что она компилируемая) не надо тащить когда можно воспользоваться чем-нибудь попроще. Про replace уже сказали
"Всё что не убивает нас, делает нас сильнее..."
Re[2]: Работа со строками.
От: Кодт Россия  
Дата: 01.03.06 08:31
Оценка: :)
"Андрей Тарасевич" <2174@users.rsdn.ru> wrote in message news:1705356@news.rsdn.ru...

> Т.е. 'king' надо заменить на 'ked'? Или на просто 'ed'?


Это к вопросу о деепричастии "батарея"?
Posted via RSDN NNTP Server 2.0
Перекуём баги на фичи!
Работа со строками.
От: xEvgeNx  
Дата: 28.02.06 17:26
Оценка:
Подскажите!!

Нужно в строке заменить слова оканчивающиеся на ing на ed . .
Re: Работа со строками.
От: Константин Ленин  
Дата: 28.02.06 17:38
Оценка:
Здравствуйте, xEvgeNx, Вы писали:

EN>Подскажите!!


EN>Нужно в строке заменить слова оканчивающиеся на ing на ed . .


здесь
Re[2]: Работа со строками.
От: xEvgeNx  
Дата: 28.02.06 17:46
Оценка:
Здравствуйте, Константин Ленин, Вы писали:

КЛ>Здравствуйте, xEvgeNx, Вы писали:


EN>>Подскажите!!


EN>>Нужно в строке заменить слова оканчивающиеся на ing на ed . .


КЛ>здесь



А есть что нибудь на русском?
Re: Работа со строками.
От: Андрей Тарасевич Беларусь  
Дата: 28.02.06 17:57
Оценка:
Здравствуйте, xEvgeNx, Вы писали:

EN>Нужно в строке заменить слова оканчивающиеся на ing на ed . .


Т.е. 'king' надо заменить на 'ked'? Или на просто 'ed'?
Best regards,
Андрей Тарасевич
Re[2]: Работа со строками.
От: xEvgeNx  
Дата: 28.02.06 17:58
Оценка:
Здравствуйте, Андрей Тарасевич, Вы писали:

АТ>Здравствуйте, xEvgeNx, Вы писали:


EN>>Нужно в строке заменить слова оканчивающиеся на ing на ed . .


АТ>Т.е. 'king' надо заменить на 'ked'? Или на просто 'ed'?


на ked
Re: Работа со строками.
От: rg45 СССР  
Дата: 28.02.06 18:10
Оценка:
Здравствуйте, xEvgeNx, Вы писали:

EN>Подскажите!!


EN>Нужно в строке заменить слова оканчивающиеся на ing на ed . .


std::string::replace
На русский не переводится, извините
--
Справедливость выше закона. А человечность выше справедливости.
Re[2]: Работа со строками.
От: kan_izh Великобритания  
Дата: 28.02.06 18:40
Оценка:
rg45 wrote:

> EN>Подскажите!!

>
> EN>Нужно в строке заменить слова оканчивающиеся на ing на ed . .
>
> std::string::replace
> На русский не переводится, извините
Не пойдёт, оно умеет толкьо символы заменять, подстроки не умеет.
boost::string_algo
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[3]: Работа со строками.
От: rg45 СССР  
Дата: 28.02.06 18:59
Оценка:
Здравствуйте, kan_izh, Вы писали:

_>rg45 wrote:


>> EN>Подскажите!!

>>
>> EN>Нужно в строке заменить слова оканчивающиеся на ing на ed . .
>>
>> std::string::replace
>> На русский не переводится, извините
_>Не пойдёт, оно умеет толкьо символы заменять, подстроки не умеет.
_>boost::string_algo

Да, соврал, малость, извиняйте .

Надо было сказать:
std::string::find,
std::string::erase и
std::string::insert,
но это уже конечно не так элегантно.
--
Справедливость выше закона. А человечность выше справедливости.
Re[3]: Работа со строками.
От: rg45 СССР  
Дата: 28.02.06 20:30
Оценка:
Здравствуйте, Chipsеt, Вы писали:

C>Чисто моё имхо, лишнюю библиотеку (тем более что она компилируемая) не надо тащить когда можно воспользоваться чем-нибудь попроще. Про replace уже сказали


Поддерживаю
ИМХО бустом часто злопуотребляют.
--
Справедливость выше закона. А человечность выше справедливости.
Re[3]: Работа со строками.
От: kan_izh Великобритания  
Дата: 28.02.06 20:45
Оценка:
Chipsеt wrote:

> EN>>Нужно в строке заменить слова оканчивающиеся на ing на ed . .

> КЛ>здесь <http://boost.org/libs/regex/doc/index.html&gt;
> Чисто моё имхо, лишнюю библиотеку (тем более что она компилируемая) не
> надо тащить когда можно воспользоваться чем-нибудь попроще. Про replace
> уже сказали
Для данной задачи regex использовать, конечно, не надо. std::string::replace тебе не подойдёт. А boost::string_algo не
требует компиляции.

По-моему, чем раньше начнёшь использовать буст, тем меньше велосипедов изобретёшь.
Тем более, давно пора большую часть буста в стандарт засунуть.
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[4]: Работа со строками.
От: Chipsеt Россия http://merlinko.com
Дата: 28.02.06 21:52
Оценка:
Здравствуйте, kan_izh, Вы писали:

_>Chipsеt wrote:


>> EN>>Нужно в строке заменить слова оканчивающиеся на ing на ed . .

>> КЛ>здесь <http://boost.org/libs/regex/doc/index.html&gt;
>> Чисто моё имхо, лишнюю библиотеку (тем более что она компилируемая) не
>> надо тащить когда можно воспользоваться чем-нибудь попроще. Про replace
>> уже сказали
_>Для данной задачи regex использовать, конечно, не надо. std::string::replace тебе не подойдёт. А boost::string_algo не
_>требует компиляции.

_>По-моему, чем раньше начнёшь использовать буст, тем меньше велосипедов изобретёшь.

Я против буста? Я его использую примерно так-же как и STL. Просто не надо перебарщивать. Зачем писать кучу кода для for_each когда можно обойтись for? Знание буста это так-же и знание где какие части его надо/не надо применять.
_>Тем более, давно пора большую часть буста в стандарт засунуть.
... << RSDN@Home 1.2.0 alpha rev. 644>>
"Всё что не убивает нас, делает нас сильнее..."
Re[3]: Работа со строками.
От: BitField Украина http://lazy-bitfield.blogspot.com
Дата: 01.03.06 07:07
Оценка:
Здравствуйте, kan_izh, Вы писали:

>> std::string::replace

>> На русский не переводится, извините

_>Не пойдёт, оно умеет толкьо символы заменять, подстроки не умеет.


Да кто Вам сказал подобное?
std::string::find + std::string::replace

#include <string>
using namespace std;

int main()
{
  string s1 = "king king";
  string s2 = "ing";
  
  for (;;)
  {
    size_t pos = s1.find(s2);
    if (string::npos == pos)
      break;
    s1.replace(pos, s2.size(), "ed");
  }


Можно еще оптимизировать чуть.. Но общий принцип -- показан.
Re[3]: Работа со строками.
От: BitField Украина http://lazy-bitfield.blogspot.com
Дата: 01.03.06 07:24
Оценка:
Здравствуйте, kan_izh, Вы писали:

_>boost::string_algo


Если человек уже использует буст в своем проекте -- тогда да... А если, допустим, буст подключать к проекту нежелательно.

Или же это домашнее задание? Вот преподаватель то удивится!

Так что вариантов несколько. Если буст уже в проекте -- тогда string_algo, regex.
Если нет -- что-нибудь из семейства string::find + string::replace..(хотя, конечно, реаллокаций многовато будет)
Re[4]: Работа со строками.
От: Кодт Россия  
Дата: 01.03.06 08:44
Оценка:
> _>Не пойдёт, оно умеет толкьо символы заменять, подстроки не умеет.
>
> Да кто Вам сказал подобное?
> std::string::find + std::string::replace
>
> #include <string>
> using namespace std;
> 
> int main()
> {
>   string s1 = "king king";
>   string s2 = "ing";
>   
>   for (;;)
>   {
>     size_t pos = s1.find(s2);
>     if (string::npos == pos)
>       break;
>     s1.replace(pos, s2.size(), "ed");
>   }
>

Натравите этот код на тестовые примеры.
Например, "bringing 'ing'-ending substrings" -> "breded 'ed'-ended substreds"

Его не оптимизировать чуть надо, а дорабатывать напильником.
1) проверять, что "ing" это окончание слова (т.е. перед ним — буква, а после него — не буква)
2) при этом следить за границами контейнера
В строке "ingolstadt to kettering" нельзя проверять
— первый раз isalpha(s1[pos-1])
— второй раз isalpha(s1[pos+3])

Далее,
3) может потребоваться нечувствительность к регистру
4) если искомая и заменяемая строки пересекаются, то поиск
— каждый раз от начала
— строго после точки замены
— строго после точки замены, а когда дойдём до конца строки — вновь с начала
дадут разные результаты. В одних случаях требуется одно, в других другое.
Нельзя сказать, что какой-то из них неправильный.
Posted via RSDN NNTP Server 2.0
Перекуём баги на фичи!
Re[5]: Работа со строками.
От: BitField Украина http://lazy-bitfield.blogspot.com
Дата: 01.03.06 09:01
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Натравите этот код на тестовые примеры.

К>Например, "bringing 'ing'-ending substrings" -> "breded 'ed'-ended substreds"

К>Его не оптимизировать чуть надо, а дорабатывать напильником.


Согласен. Код выше был приведен для примера и как ответ на фразу "std::string::replace позволяет заменять только символы, но не подстроки".

К>1) проверять, что "ing" это окончание слова (т.е. перед ним — буква, а после него — не буква)

Первая из проверок может быть и не нужна. Смотря по условиям задачи..

К>2) при этом следить за границами контейнера

К>В строке "ingolstadt to kettering" нельзя проверять
К>- первый раз isalpha(s1[pos-1])
См. предыдущую фразу.
К>- второй раз isalpha(s1[pos+3])
Для упрощения можно добавить пробел в конец строки.
К>....
Для этих целей оптимальное решение, имхо, любая regexp библиотека. Другое дело, что перед АТ может стоять задача "с использованием только стандартной библиотеки".
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.