Jedno z zadań z egzaminu

0

Mógłby ktoś mi pomóc rozgryźć jak zrobić zadanie z egzaminu?
Mam dany taki kod (poniżej) i mam tylko uzupełnić kod we wskazanych miejscach:

// UZUPEŁNIJ 1

int main()
{
	std::string col = "maly tekst";

	std::for_each( /*UZUPEŁNIJ 2*/ f() );
	std::copy( /*UZUPEŁNIJ 3*/);
	

	getchar();
	return 0;
}
// Wyjscie:
// TSKET YLAM

Ok więc to co wypociłem wygląda mniej więcej tak:

// UZUPEŁNIJ 1

#include <iostream>
#include <algorithm>
#include <string>

struct f
{
	void operator() ( char* );
	std::string txt;
} A;

void f::operator() ( char* c )
{
	if( *c >= 'a' && *c <= 'z' )
		*c -= 'a' - 'A';
	
	A.txt += *c;

	if( *c == '\0' )
	{
		std::reverse( A.txt.begin(), A.txt.end() );
		std::cout << A.txt;
	}
}

int main()
{
	std::string col = "maly tekst";

	std::for_each( /*UZUPEŁNIJ 2*/col.begin(), col.end(), f() );
	std::copy( /*UZUPEŁNIJ 3*/A.txt.begin(), A.txt.end(), col.begin());
	

	getchar();
	return 0;
}
// Wyjscie:
// TSKET YLAM

Troszeczkę inaczej wyglądał mój kod na kartce egzaminacyjnej ale coś koło tego ( w domu mogę przynajmniej liczyć na kompilator i na dokumentacje w internecie, aczkolwiek dalej nie jestem w stanie tego zrobić ).

EDIT:
Próbowałem też zastosować std::iterator w opratorze(), ale też się nie chciało zrobić.

0

A można tak:

#include <string>
#include <iostream>
#include <iterator>
#include <algorithm>
#include <cctype>
 
inline void f(char &c) {
  c = toupper(c);
}
 
int main() {
  std::string col("maly tekst");
 
  std::for_each(col.begin(), col.end(), f);
  std::copy(col.rbegin(), col.rend(), std::ostream_iterator<char>(std::cout));
 
  return 0;
}

http://ideone.com/WHWKT

0

Nice, czyli jednak dało się zrobić to zadanie..

struct f
{
	void operator() (char& c) { c = toupper(c); }
};

Zmieniłem tylko to, bo w pętli for_each jest konstruktor a nie adres funkcji.
Dzięki Endrju.

1 użytkowników online, w tym zalogowanych: 0, gości: 1