Задача 5 от домашно 2 (String replace)
Използвам това парче от код да заместя всяко съвпадение на substring в string, но понеже надхвърлям дължината на стринга ми дава грешка. Някакви идеи как да се предотврати?
#include <iostream>
using namespace std;
string changeText(string text, string search, string replace) {
string result;
while (1) {
if (text.find(search) < 0) {
break;
}
result = text.replace(text.find(search), search.length(), replace);
}
return result;
}
int main()
{
string text = "I am the night. Dark Night! No, not the knight";
string search = "night";
string replace = "day";
cout << changeText(text, search, replace) << endl;
return 0;
}
цикалъти ти се завърта 3 пъти
1. позиция 9 -вярно
2, позиция 39 вярно
3. когато трябва да ти даде бреак-изход числото е 4294967295 по голямо от 0 и не излиза от цикъла а продължава да замества ГРЕШНО в стринга и ти дава ръмтайм ерор. Компилатора така си го е замислил.
Ако смениш if (result.find(search)<0) break; на if (result.find(search)== string::npos) break;
всичко е ок!
Това дали е оптимална програмата не е задача на упражнението.
Компилаторски му работи! едно -1 не може да върне като хората.
абе C...