C++ Удалить не -ASCII-символы из строки

Прежде чем вы начнете; да, я знаю, что это повторяющийся вопрос, и да, я просмотрел опубликованные решения. Моя проблема в том, что я не мог заставить их работать.

bool invalidChar (char c)
{ 
    return !isprint((unsigned)c); 
}
void stripUnicode(string & str)
{
    str.erase(remove_if(str.begin(),str.end(), invalidChar), str.end()); 
}

Я испытал этот метод на «Прусее,египтяне", и это ничего не сделало Я также попытался заменить isprintна isalnum

. Настоящая проблема возникает, когда в другом разделе моей программы я конвертирую строку ->wstring ->строку. преобразование блокируется, если в строке ->wstring есть символы Юникода.

Ссылка:

Как удалить из строки символы, отличные от -ASCII? (в C#)

Как удалить все небуквенно-цифровые символы из строки в C++?

Изменить:

Я по-прежнему хотел бы удалить все не -ASCII-символы, несмотря на то, если это поможет, вот где я вылетаю:

// Convert to wstring
wchar_t* UnicodeTextBuffer = new wchar_t[ANSIWord.length()+1];
wmemset(UnicodeTextBuffer, 0, ANSIWord.length()+1);
mbstowcs(UnicodeTextBuffer, ANSIWord.c_str(), ANSIWord.length());
wWord = UnicodeTextBuffer; //CRASH

Диалоговое окно ошибок

Библиотека отладки MSVC++

Ошибка утверждения отладки!

Программа ://мой проект

Файл :f :\dd\vctools\crt _bld\self _x86\crt\src\isctype.c

Строка :// Выше

Выражение :(без знака )(c+1 )

Изменить:

Дальнейшее усугубление вопроса :файл.txt, из которого я читаю, соответствует стандарту ANSI закодировано. Все в пределах должно быть действительным.

Решение:

bool invalidChar (char c) 
{  
    return !(c>=0 && c <128);   
} 
void stripUnicode(string & str) 
{ 
    str.erase(remove_if(str.begin(),str.end(), invalidChar), str.end());  
}

Если кто-то еще захочет скопировать/вставить это, я могу отметить этот вопрос.

РЕДАКТИРОВАТЬ:

Для дальнейшего использования :попробуйте использовать команды__isascii, iswascii

7
задан Community 23 May 2017 в 12:02
поделиться