Професионална програма
Loading...
+ Нов въпрос
DimovIvan avatar DimovIvan 7 Точки

C++Fundamentals-Strings and Streams-Exercise-Replace All

Write a program which is given a line of text, another line with a "find" string and another line with a "replace" string. Any part of text which matches the "find" string should be replaced with the "replace" string. Print the resulting text on the console.
Examples
 
Input                                                                                   Output       
I am the night. Dark Night! No, not the knight                    I am the day. Dark Night! No, not the kday 
night
day     

Явно не съм разбрал как работи функцията replase() защото ми подменя само първата срещната дума:

https://pastebin.com/4et85Vrm

A  когато пробвам да завъртя изречението по думи и на всяка дума да викам функцията, програмата ми се чупи:

https://pastebin.com/cBfRA45t

Ще съм благодарен ако някой ми обясни къде греша.

Тагове:
0
C++ Fundamentals
j.petrov_90 avatar j.petrov_90 224 Точки

Привет, колега,

Теснах решението ти. Judge дава 100 от 100.
Вторият линк за жалост е изтекъл и виждам само първият.

Като цяло не виждам проблем в решението ти на първо четене.

Това, което ми прави впечатление, обаче е, че използваш подходът 
find в while цикъл, като всеки път добавяш + 1 на индекса.
Това ще работи, ако стринга не се променяше.

Обаче ти хем го променяш, хем разчиташ, че не е променен.
Например find ти е върнало индекс 10. 
Да де, ама ти смениш стринг с 3 букви със стринт 13 букви проверката индекс + 1 ще продължава ли да е валидна? 

0
DimovIvan avatar DimovIvan 7 Точки

Благодаря за забележката!

indexToFind = line.find(strToFind, indexToFind + strToReplace.size());

Това ли е правилният начин за промяна на стъпката на индекса?

0
19/04/2021 09:40:23
j.petrov_90 avatar j.petrov_90 224 Точки

Изглежда вяпно.
Дано не пропускам нещо :)

0