gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:10:04 25 4
gpt4 key购买 nike

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

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

我在“Prusæus, AEgyptians”上测试了这个方法,但它什么也没做我还尝试用 isprint 代替 isalnum

真正的问题发生在我程序的另一部分我转换 string->wstring->string 时。如果 string->wstring 转换中存在 unicode 字符,则转换会失败。

引用:

How can you strip non-ASCII characters from a string? (in C#)

How to strip all non alphanumeric characters from a string in 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)<=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());
}

如果其他人想复制/粘贴这个,我可以勾选这个问题。

编辑:

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

最佳答案

解决方法:

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 命令

关于C++ 从字符串中去除非 ASCII 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10178700/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com