gpt4 book ai didi

C 以可移植和国际友好的方式删除换行符

转载 作者:太空宇宙 更新时间:2023-11-04 02:43:15 29 4
gpt4 key购买 nike

这里的简单问题和一个可能很棘手的答案:我正在寻找一种可移植本地化友好的方法来删除 C 中的尾随换行符,最好是基于标准的方法。

我已经知道以下解决方案:

  • 解析 \r\n 的一些组合。在处理 Windows、*nix 和 Mac 时真的不太好,它们都使用不同的序列来表示新行。另外,其他语言甚至对新行使用相同的转义序列吗?我预计这会在使用与英语不同字形的语言(例如日语等)中爆炸。

  • 删除结尾的 n 字节并替换最后的 \0。似乎是执行上述操作的一种更脆弱的方式。

  • isspace 看起来很诱人,但我只需要匹配换行符。其他空格被认为是有效的标记文本。

  • C++ 有一个类可以执行此操作,但在纯 C 世界中它对我帮助不大。

  • locale.h 似乎是我所追求的,但我看不到任何与提取换行符相关的信息。

因此,这是一个我必须“推出自己的”功能的实例,还是我遗漏了什么?谢谢!


解决方案

我最终结合了 Weather VaneLoic 的两个答案,分别作为我的最终解决方案。有效的方法是使用方便的 strcspn 函数来中断从 Loic 提供的链接中选择的第一个换行符。因此,我可以根据许多受支持的语言环境来选择定界符。很好的一点是,在这个级别上有太多的一般支持;我什至不知道西里尔字母有几种相互竞争的编码。

通过这种方式,我可以在仍然使用标准库函数的同时实现“足够好”的跨国支持。

由于我只能接受一个答案,所以我选择了 Weather Vane 的答案,因为他是我使用的最后一个调用。话虽如此,这两个答案确实对我有用。

最佳答案

我知道的最好的是

buffer [ strcspn(buffer, "\r\n") ] = 0;

这是处理 \r\n 的所有组合的安全方法 - 一个或一个都没有。

关于C 以可移植和国际友好的方式删除换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29832261/

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