计算化学公社

 找回密码 Forget password
 注册 Register
Views: 264|回复 Reply: 1
打印 Print 上一主题 Last thread 下一主题 Next thread

[C/C++] 一种在C代码中识别是否存在非ASCII字符的方法分享与讨论

[复制链接 Copy URL]

21

帖子

1

威望

90

eV
积分
131

Level 2 能力者

本帖最后由 TerminSong 于 2025-4-9 11:07 编辑

由于现在大家大多是双系统,中英文混着写的情况也比较常见,偶尔可能会有这种需求,其实这种做法我已经用了很久了。
只是今天偶然发现有些技术论坛中有人吐槽C++区分一段字符串中是否存在中文比其他语言复杂太多,故分享一下我一般的做法:
  1. char buffer[200]{ "\0" },  engBuf[200]{"\0"};
  2.         while (true)
  3.         {
  4.                 std::cin.getline(buffer, 200);
  5.                 if (sscanf(buffer, "%[ !-~]%s", engBuf, buffer) != 1)
  6.                 {
  7.                         printf("has non eng\n\n");
  8.                 }
  9.                 else
  10.                 {
  11.                         printf("eng\n\n");
  12.                 }

  13.         }
复制代码

什么嘛,我也是能写的蛮简单的嘛(BGM on)


刚刚重新摸索了下发现能写的更简单,已更新

不过还是要注意,虽然借助于连字符'-'的方括号的格式匹配作为scanf一族函数的扩展十分常见,但是其实它并不在C标准要求中【引用】,
所以对于某些特殊编译器,必要情况下可能还是需要挨个把字符打进方括号里。


202504091050245323..png (58.11 KB, 下载次数 Times of downloads: 60)

cmd

cmd

202504091052047859..png (65.54 KB, 下载次数 Times of downloads: 55)

WSL

WSL

395

帖子

8

威望

3906

eV
积分
4461

Level 6 (一方通行)

石墨

2#
发表于 Post on 2025-4-9 14:30:29 | 只看该作者 Only view this author
本帖最后由 Graphite 于 2025-4-9 14:44 编辑
  1. bool is_ascii(char c) {
  2.     return ((uint8_t)(c) < 128);
  3. }

复制代码

自在飞花轻似梦,无边丝雨细如愁。

全自动反应动力学(ReaxFF、AIMD、NEP等)后处理工具网页版:http://cc-portal.xyz/reax_tools

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2025-8-12 21:37 , Processed in 0.654170 second(s), 23 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list