C++从字符串中删除非ASCII字符

Ant*_*nyW 7 c++ string ascii

在你开始之前; 是的我知道这是一个重复的问题,是的,我已经查看了发布的解决方案.我的问题是我无法让他们工作.

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

我在"Prusæus,Ægyptians"上测试了这种方法,它也没有做任何我试图替代isprint的方法isalnum

真正的问题发生在我的程序的另一部分我转换string-> wstring-> string.如果string-> wstring转换中有unicode字符,则转换为balks.

参考:

如何从字符串中删除非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
Run Code Online (Sandbox Code Playgroud)

错误对话框

MSVC++调试库

调试断言失败!

Program:// myproject

文件:f:\ dd\vctools\crt_bld\self_x86\crt\src\isctype.c

行://在上面

表达:(无符号)(C + 1)<= 256

编辑:

进一步复杂化问题:我正在读取的.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());  
}
Run Code Online (Sandbox Code Playgroud)

如果其他人想要复制/粘贴此内容,我可以关闭此问题.

编辑:

供将来参考:尝试使用__isascii,iswascii命令

Ant*_*nyW 12

解:

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

编辑:

供将来参考:尝试使用__isascii,iswascii命令