Я искал и искал, но ничего из того, что я пробовал, не работает правильно.
Что ж, если вы ищете решение проблемы и хотите использовать то, чего у вас нет попробовал, то использование std :: istringstream делает код тривиальным:
#include <sstream>
#include <string>
#include <iostream>
std::string convertDate(std::string dateP)
{
// create a stream from the passed-in string
std::istringstream strm(dateP);
// get the month, day and year from the stream
std::string month, day, year;
strm >> month >> day >> year;
// get rid of the comma (the last character in the day string)
day.pop_back();
// put together the resulting string and return
return day + " " + month + " " + year;
}
int main()
{
std::cout << convertDate("December 29, 1953");
}
Вывод:
29 December 1953
Обратите внимание на отсутствие кода для поиска пробелов, или создание подстрок.
std::istringstream
автоматически знает, как пропускать пробелы, аналогично std::cin
, поэтому код для поиска пробелов не требуется.
Функция pop.back()
удаляет последний элемент в строке. Поскольку предполагается, что ','
является последним символом в строке day
, pop.back()
просто удаляет его.
В конце мы просто склеиваем все части и возвращаем полученную строку.