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

2023-12-30

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

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,埃及人”上测试了这种方法,但它没有任何作用 我也尝试过替代isprint for isalnum

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

Ref:

如何从字符串中去除非 ASCII 字符? (在 C# 中) https://stackoverflow.com/questions/123336/how-can-you-strip-non-ascii-characters-from-a-string-in-c

如何从 C++ 字符串中删除所有非字母数字字符? https://stackoverflow.com/questions/6319872/how-to-strip-all-non-alphanumeric-characters-from-a-string-in-c

Edit:

我仍然想删除所有非 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)

Edit:

更复杂的是:我正在读取的 .txt 文件是 ANSI 编码的。里面的一切should是有效的。

解决方案:

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

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

EDIT:

供将来参考:尝试使用__isascii,iswascii http://msdn.microsoft.com/en-us/library/5wcd48xw.aspx命令


解决方案:

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

EDIT:

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 从字符串中去除非 ASCII 字符 的相关文章

  • 将列表数组中的值绑定到列表框

    任何机构都可以给出一个简短的示例 用于将列表数组中的值绑定到 c net 中的列表框 这取决于您的列表数组的情况 让我们从一个简单的示例开始 List
  • 沿着长数据序列在固定大小的移动窗口中查找中值

    给定一个数据序列 可能有重复项 一个固定大小的移动 窗口 从数据开始处每次迭代时移动窗口 序列 使得 1 从窗口中删除最旧的数据元素并添加新数据 元素被推入窗口 2 求每次移动时窗口内数据的中位数 以下帖子没有帮助 有效地找到随机序列的中值
  • Windows 10 UWP 中的视觉状态管理器未在页面加载时应用初始状态

    我有一个带有相关面板的页面 可以根据宽度重新组织 但是 除非宽度 gt 720px 否则它似乎不会在加载时应用任何状态 如果我在加载页面后调整页面大小 则两种状态都有效 解决方法是检查加载页面上的窗口大小并手动选择状态 但我相信这应该自动处
  • MVC 中的 Blazor:组件被渲染,但 @onclick 不起作用。连接问题

    我正在尝试在 net core 3 MVC 项目中使用 Blazor 我使用了一些教程来做到这一点 例如https fizzylogic nl 2019 08 18 integrating blazor in an existing asp
  • 如何在Qt中更快地读取数据?

    Qt读取数据库比C 慢吗 我想我错过了一些东西 为了比较阅读速度 我在 Qt 中编写了以下内容 QElapsedTimer t t start int count 0 QString cs Driver SQL Server Server
  • ASP.NET 数据集 getdataBy 无法启用约束。一行或多行包含违反非空、唯一或外键约束的值

    你好 我有一个非常简单的网络表单 我在此表单上有一个按钮和一个网格视图 以及一个包含链接表 bill docket docket bill 等的数据集 在按钮上单击我使用以下代码 protected void button click ob
  • 使用 CMake 对 SDL 的未定义引用

    我正在使用 SDL v1 2 15 7 和 CMake 3 2 1 开发一个项目 在 h 文件中我添加了 include
  • 为什么 .Net 框架指南建议您不要使用 ref/out 参数?

    显然 他们很 混乱 这是认真的原因吗 你还能想到其他的吗 你见过有多少开发人员并不真正理解 ref out 吗 我在真正需要的地方使用它们 但在其他地方则不然 它们通常仅在您想有效返回两个或多个值时才有用 在这种情况下它至少值得thinki
  • 本地主机和 request.Url.Authority

    我的应用程序通过 URL 中的公司标识符分隔用户 company1 app com company2 app com 我正在本地 PC 上进行测试 请求如下 company1 localhost com 但是 我的 request Url
  • C++ 虚拟关键字与重写函数

    我正在学习c 并且正在学习virtual关键字 我在互联网上搜索试图理解它但无济于事 我进入编辑器并做了以下实验 期望它打印两次基本消息 因为我的印象是需要 virtual 关键字来覆盖函数 然而 它打印出了两条不同的消息 有人可以向我解释
  • 在 OpenGL 中使用不同的着色器程序?

    我必须在 OpenGL 中针对不同的对象使用两个不同的着色器程序 我发现我必须使用glUseProgram 在不同的着色器程序之间切换 但对此没有太多信息 鉴于我有两个用于不同对象的不同着色器程序 如何为每个着色器程序生成和绑定 VAO 和
  • DataContractJsonSerializer 包含元素类型子类型的通用列表

    我要使用DataContractJsonSerializer用于 JSON 序列化 反序列化 我在 JSON 数组中有两种对象类型 并希望将它们都反序列化为相应的对象类型 具有以下类定义 DataContract public class
  • C++ 中类型信息何时向后流动?

    我刚刚看了 Stephan T Lavavej 的演讲CppCon 2018关于 类模板参数推导 在哪里某个点 https youtu be H ut6j1BYU t 941他顺便说 在 C 中 类型信息几乎永远不会向后流动 我不得不说 几
  • 如何在Phone类库项目中添加ResourceDictionary并访问它

    我正在开发一个项目 其中我有一个引用图书馆项目的子项目 在我的库项目 电话类库 中 如何创建 ResourceDictionary xaml 其中我需要添加一些样式并在 xaml 文件和 cs 文件中使用它 我需要访问 xaml 文件中的
  • 为什么 C++20 范围不只提供管道语法?

    我知道这个问题听起来很奇怪 所以这里有一些背景信息 最近 我很失望地了解到 C 20 范围内的映射缩减并不像人们所期望的那样工作 即 const double val data transform accumulate 不起作用 你必须这样
  • 如何从 Function App 设置会话 ID 或创建自定义字段到 Application Insights

    功能应用程序如下 public static async Task
  • C 中函数“fgets”的参数太少

    每当我编译这个错误时 我都会收到该错误 但我不知道为什么 我直接从书上抄袭这个 有人可以帮忙吗 include
  • 不兼容的指针到字符转换

    我正在编写一个程序 将卡片值写入 52 个点字符的多维数组中 该程序是一个测试数组 稍后我将其作为函数写入主程序中 在程序中 我通过以下方式初始化 for 循环计数0通过51 我用一个switch语句调制13将卡牌值分配给数组点 但是 我收
  • 您的 C++ 程序中是否仍然存在内存分配失败问题 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在为公司写一些指导方针 我需要回答一些棘手的问题 这一项是相当困难的 解决方案可以是 根本不跟踪 确保使用 new 分配对象 这会在分配失败
  • File.Move 的原子性

    我想将目录中的文件重命名为原子事务 该文件不会更改目录 该路径作为 NTFS 文件系统的 UNC 路径提供 可能位于服务器 03 或 08 上 File Move 对于这些目的来说是原子的吗 例如 它要么成功完成 要么失败 以使原始文件仍然

随机推荐

  • 在多维 NSMutableArray 中添加对象

    我对如何在多维数组中添加对象感到非常困惑 初始化多维数组与初始化简单数组相同吗 这是我的初始化 testList NSMutableArray alloc init 我需要做类似的事情 testList i j item i tried t
  • 如何使用 psycopg2 从具有键值对的 postgres 表中检索某个键的值

    我是新来的python 尝试使用psycopg2读书Postgres 我正在从名为部署的数据库表中读取数据 并尝试处理具有三个字段 id Key 和 value 的表中的值 import psycopg2 conn psycopg2 con
  • 如何从水晶报表的 ExportToStream 中的 Web API 中获取 pdf 流?

    我在通过流媒体将水晶报告导出为 pdf 时遇到问题 我使用 Web Api 并据称将 pdf 流返回给我的客户端 即 angularJS 这是我的代码 服务器端 控制器 Route api transcript HttpPost publi
  • 当在 JList 中选择一个项目时,我将如何编码?

    我有一个 JList 其中有 5 个选项 当选择或单击其中一个项目时 我希望它旁边的文本区域显示与所单击的项目相关的一段文本 它应该对列表中的每个项目执行此操作 但我似乎无法找到如何在 API 中执行此操作 我的程序如何知道 JList 中
  • OS X:列出并删除带有空格的文件

    我想在 OS X 中执行此操作 ls rt xargs rm i 然而 rm因某些文件有空格而感到窒息 我提到 OS X 是因为 BSD 版本ls没有 Q flag 有没有一种方法可以做到这一点而无需使用find print0 sgeorg
  • 区分数据类型和数据结构

    好吧 不知何故 即使在阅读了很多教科书 真的很多 和在互联网上阅读了很长一段时间后 我仍然无法完全理解所提到的两个事物之间的区别是什么 为了简化问题 根据维基百科 数据类型是 识别各种类型数据之一的分类 例如实数 整数或布尔值 确定该类型的
  • 数字列表的平均值,以字符串形式存储在 Python 列表中

    我想计算python中几个列表的平均值 这些列表包含数字作为字符串 空字符串不是零 它意味着缺少值 我能想到的最好的就是这个 有没有更优雅 简洁 高效的写法 num 1 2 6 total sum int n if n else 0 for
  • 如何在 Mac 上安装 jmeter?

    我们想使用 JMeter 我已按照用户手册中的指示下载了生产版本 http jmeter apache org usermanual get started html http jmeter apache org usermanual ge
  • Dagger 2 无法访问 Retrofit

    我正在尝试使用 Dagger 2 带有 Android 模块 向我的存储库提供一个 Retrofit 实例 购买时我遇到错误 错误 无法访问改造 其他实例 例如毕加索 注入成功 我只是在改造方面遇到问题 我的模块 Module class
  • numpy.std 和 excel STDEV 函数有什么区别吗?

    我有一个清单 s 0 995537725 0 994532199 0 996027983 0 999891383 1 004754272 1 003870012 0 999888944 0 994438078 0 992548715 0 9
  • javascript 数组中的 JSON 导致错误无法读取属性

    我有一些 javascript 已经一年多没有改变了 突然它就坏了 所以我的第一个想法是它一定与数据有关 从数据来看 结构已经一年多没有发生变化 运行了很长一段时间都好好的 突然就坏了 这是我的 js 用一些 JSON 填充数组 var h
  • Spring Sleuth 在向 Zipkin 发送 10% 的请求时卡住了

    默认情况下 Spring Sleuth 仅向 Zipkin 发送 10 的请求 通过设置spring sleuth sampler percentage你可以增加百分比 不幸的是 无论我将其设置为什么值 它都停留在 10 我尝试过1 0 0
  • 如何在pygame中使圆从一个角到另一个角对角移动

    我创建了一个程序来对形状进行动画处理 并且只移动了 x 轴或 y 轴 而从未同时移动过这两个轴 所以对角移动对我来说是全新的 下面是我的代码 Author Victor Xu Date January 20th 2021 Descripti
  • 在sklearn中保存MinMaxScaler模型

    我正在使用MinMaxScalersklearn 中的模型用于标准化模型的特征 training set np random rand 4 4 10 training set 6 01144787 0 59753007 2 0014852
  • InvalidOperationException:集合已修改 - 尽管锁定了集合

    我有一个同步哈希表 我定期从中删除一些条目 多个线程运行此代码 因此 我锁定了整个 foreach 但有时仍然会收到 InvalidOperationException Collection was generated at Hashtab
  • 该类不符合键的键值编码[重复]

    这个问题在这里已经有答案了 我目前正在通过 Jeff LaMarche 的 iPhone 4 开发入门 学习如何为 iPhone 编写代码 但遇到了一个问题 我似乎看不出问题出在哪里 我在许多论坛上读到 这是 IBOutlet 连接不正确的
  • 给定运行时数据,如何知道排序程序是使用冒泡排序还是插入排序?

    我测量了一个排序程序 算法 并根据运行时数据 将其范围缩小为两种排序算法 冒泡排序和插入排序 有没有办法确定它是哪一个 当然是在不知道代码的情况下 它们都有相同的时间复杂度 我已经没有主意了 时间复杂度数据 排序 O n 1000 个数字所
  • Android 谷歌地图 api v2 夜间模式

    我正在开发一个使用全屏谷歌地图 API 2 的Android应用程序 例如 使用我的应用程序的司机希望在晚上 10 点到早上 6 点之间使用 夜间模式 这在 Android 中可能吗 将地图模式更改为 夜间 类似于Android手机中已有的
  • 我可以控制 IE 10 选择框的位置吗?

    在 Internet Explorer 10 中 下拉框的行为
  • C++ 从字符串中去除非 ASCII 字符

    在开始之前 是的 我知道这是一个重复的问题 是的 我已经查看了发布的解决方案 我的问题是我无法让他们工作 bool invalidChar char c return isprint unsigned c void stripUnicode