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.