Witam wszystkich,
Mam problem z jednym zadaniem, treść poniżej:
Napisz funkcje function, która przyjmuje niemodyfikujacy iterator poczatkowy i koncowy wycinka lancucha tekstowego oraz modyfikujacy iterator poczatkowy innego wycinka.
Funkcja przepisuje zawartosc pierwszego wycinka do drugiego zamieniajac kazda sekwencje \r\n na \n i odwrotnie.
Funkcja zwraca modyfikujacy iterator nastepnego znaku za ostatnim wpisanym.
Funkcja powinna byæ przystosowana do uzycia w przykladowym programie ponizej. Funkcja korzysta tylko z pliku naglówkowego string.
Przykladowy program
int main() {
std::string in = "peppermint 1001\rbubbles\nballoon\r\ngum", out(100, '*');
auto e = function(in.cbegin(), in.cend(), out.begin());
int n = e - out.begin();
std::string s = out.substr(0, n);
bool b = (s == "peppermint 1001\rbubbles\r\nballoon\ngum");
std::cout << std::boolalpha << b << std::endl; }
Wykonanie
true
Męczę to zadanie już dłuższy czas i nie mogę sobie poradzić. Wydaje mi się, że wszystko powinno działać, a jednocześnie mam wrażenie, że o czymś zapomniałem.
Mój kod:
std::string::iterator function(std::string::const_iterator b, std::string::const_iterator e, std::string::iterator f ){
auto y = b + 1;
for(auto i = b; i<e; i++){
if((int)*i == 13 && (int)*y == 10){
*f == '\n';
} else if((int)*b == 10) {
*f = '\r';
*(f+1) = '\n';
} else {
*f = *i;
}
f++;
y++;
}
return f;
}
int main() {
std::string in = "peppermint 1001\rbubbles\r\nballoon\ngum", out(100, '*');
auto e = function(in.cbegin(), in.cend(), out.begin());
int n = e - out.begin();
std::string s = out.substr(0, n);
std::cout<< s << "\n\n";
bool b = (s == "peppermint 1001\rbubbles\r\nballoon\ngum");
std::cout << std::boolalpha << b << std::endl;
}
Warto dodać, że mogę operować tylko na funkcji tzn. main nie może zostać zmienony oraz używam jedynej biblioteki tj. string oraz iostream.
Czy jakieś wprawne oko dostrzega błąd w powyższym kodzie? Będe bardzo wdzięczny za pomoc ;-)