计算化学公社

标题: 一种在C代码中识别是否存在非ASCII字符的方法分享与讨论 [打印本页]

作者
Author:
TerminSong    时间: 2025-4-9 10:08
标题: 一种在C代码中识别是否存在非ASCII字符的方法分享与讨论
本帖最后由 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标准要求中【引用】,
所以对于某些特殊编译器,必要情况下可能还是需要挨个把字符打进方括号里。



作者
Author:
Graphite    时间: 2025-4-9 14:30
本帖最后由 Graphite 于 2025-4-9 14:44 编辑
  1. bool is_ascii(char c) {
  2.     return ((uint8_t)(c) < 128);
  3. }

复制代码






欢迎光临 计算化学公社 (http://bbs.keinsci.com/) Powered by Discuz! X3.3