Первая проблема заключается в том, что isspace
имеет несколько перегрузок в стандартной библиотеке C ++. Первоначальное исправление заключается в предоставлении явного типа для функции, чтобы компилятор знал, для какой функции взять адрес:
#include <string>
#include <algorithm>
#include <cctype>
int main()
{
std::string str = "lol hi innit";
str.erase(std::remove_if(str.begin(), str.end(), (int(*)(int))isspace), str.end());
std::cout << str; // will output: "lolhiinnit"
}
Это ужасно, но, эй, это C ++.
Во-вторых, ваш код удалит все пробелы в строке, а это не то, что вам, кажется, нужно. Рассмотрим простое выражение if для последнего символа строки:
#include <string>
#include <cassert>
int main()
{
std::string str = "lol hi innit ";
assert(!str.empty());
if (*str.rbegin() == ' ')
str.resize(str.length()-1);
std::cout << "[" << str << "]"; // will output: "[lol hi innit]"
}
Надеюсь, это поможет.