строка :: find_last_not_of ( "0123456789")
а потом
строка :: зиЬзЬги ()
, которая дает вам позицию последней не цифры / числа. Просто возьмите все предыдущие символы, и это базовое имя.
Увеличивать на единицу, чтобы получить последовательность чисел в конце строки.
Примечание: нет проверки ошибок или других тестов.
#include <string>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
string test = "hellothere4";
size_t last_char_pos = test.find_last_not_of("0123456789");
string base = test.substr(0, last_char_pos + 1);
EDIT
Существует проблема со ВСЕМИ решениями, когда у вашего "базового имени" есть номер в конце.
например, если базовая строка "base1", вы никогда не сможете получить правильное базовое имя. Я полагаю, вы уже знаете об этом.
Или я что-то упустил? Пока базовое имя не может иметь номер в конце непосредственно перед номером постфикса, оно будет работать нормально.