Se non ho capito male devi partire da: m e risalire la stringa fino a trovare lo spazio. Giusto?
Se è così usando std::find_if e un puoi ricavare l'iteratore corrispondente al carattere che stai cercando, poi giocando con gli iteratori puoi ricavare le altre parti della stringa o la posizione numerica corrispondete a quell'iteratore.
(Metto il trattino per evidenziare).
codice:
// predicato per la ricerca del carattere o caratteri
class Pred {
std::string chars;
public:
Pred(const std::string& str) : chars(str) {}
Pred(char c) { chars.push_back(c); }
bool operator()(char c) {
return chars.find(c) != std::string::npos;
}
};
...
// versione C++98
string prova = "ciao-fooooo=m";
typedef string::iterator str_iterator;
typedef string::reverse_iterator str_riterator;
str_riterator rit = find_if(prova.rbegin(),prova.rend(), Pred("-"));
std::size_t len = std::distance(rit,prova.rend());
str_iterator it = prova.begin();
std::advance(it,len);
std::string res(it,prova.end());
cout << res << endl;
// Versione C++11
string prova = "ciao-fooooo=m";
auto rit = find_if(prova.rbegin(),prova.rend(), Pred("-"));
auto len = std::distance(rit,prova.rend());
auto it = prova.begin();
std::advance(it,len);
std::string res(it,prova.end());
cout << res << endl;
In Pred() inserisci i caratteri che vuoi escludere, find_if restituisce l'iteratore corrispondente al primo carattere della stringa di Pred() incontrato; std::distance() restituisce la posizione numerica del reverse_iterator e quindi del trattino (in questo caso partendo da c di ciao).
Il resto serve per convertire da reverse iterator a iterator.
Se hai un compilatore che supporta il C++11 (in parte almeno) puoi usare la seconda versione più corta.