Для std::isdigit
см. Раздел Примечания о том, почему вы получаете утверждение.
Исправление - привести к unsigned char
:
if (!isdigit(static_cast<unsigned char>(str[i]))
Во-вторых, ваша функция возвращает локальный временный адрес, поэтому демонстрирует неопределенное поведение. Вместо этого верните std::string
.
std::string clearString(std::string str)
{
//…
return str;
}
В-третьих, вы можете переписать свою функцию, используя std::remove_if
и std::string::erase
, вместо того, чтобы писать al oop, который удаляет символ за раз.
#include <algorithm>
//...
std::string clearString(std::string str)
{
auto iter = std::remove_if(str.begin(), str.end(),
[&](char ch)
{ return !isdigit(static_cast<unsigned char>(ch)) && ch != ',';});
str.erase(iter, str.end());
return str;
}