C++判断wchar_t空白字符

// 引入标准库支持

#include <locale>

#include <codecvt>

#include <string>

#include <vector>

#include <cwctype>

#include <cwchar>

// 标准库提供的判断函数

std::iswblank

源代码:

cpp 复制代码
#include <iostream>
#include <unordered_set>
#include <cwchar>

// 定义所有需检测的Unicode空白字符(按Unicode码点排序)
const std::unordered_set<wchar_t> UNICODE_WHITESPACE_CHARS = {
    // ASCII空白
    L'\t',    // 水平制表符 (U+0009)
    L'\n',    // 换行符 (U+000A)
    L'\v',    // 垂直制表符 (U+000B)
    L'\f',    // 换页符 (U+000C)
    L'\r',    // 回车符 (U+000D)
    L' ',     // 普通空格 (U+0020),

    // 特殊排版空格
    L'\u00A0', // 不换行空格 (U+00A0)
    L'\u2000', // 半角空格 (U+2000)
    L'\u2001', // 全角空格 (U+2001)
    L'\u2002', // 窄空格 (U+2002)
    L'\u2003', // 中等空格 (U+2003)
    L'\u2004', // 三分空格 (U+2004)
    L'\u2005', // 四分空格 (U+2005)
    L'\u2006', // 六分空格 (U+2006)
    L'\u2007', // 数字空格 (U+2007)
    L'\u2008', // 标点空格 (U+2008)
    L'\u2009', // 细空格 (U+2009)
    L'\u200A', // 极细空格 (U+200A),

    // 中文/日文全角空格
    L'\u3000', // 表意空格 (U+3000),

    // 零宽空格
    L'\u200B', // 零宽空格 (U+200B)
    L'\uFEFF', // BOM零宽不换行 (U+FEFF),

    // 数学/特殊空格
    L'\u205F', // 数学空格 (U+205F)
    L'\u1680'  // 欧甘空格 (U+1680)
};

// 判断是否为任何类型的空白字符
bool is_any_whitespace(wchar_t ch) {
    return UNICODE_WHITESPACE_CHARS.count(ch) > 0;
}

// 扩展:判断字符串是否全为空白字符
bool is_whitespace_string(const std::wstring& str) {
    for (wchar_t ch : str) {
        if (!is_any_whitespace(ch)) return false;
    }
    return !str.empty();
}

int main() {
    // 测试用例
    struct TestCase {
        std::wstring input;
        bool expected;
    };

    TestCase tests[] = {
        {L"Hello World", false},
        {L"\t\n  \u3000", true},
        {L"\u200B", true},
        {L"\uFEFF", true},
        {L"\u205F", true},
        {L"\u00A0", true},
        {L"A", false},
        {L"\u4E00", false}  // 中文字符
    };

    for (const auto& test : tests) {
        std::wcout << L"输入: '" << test.input << L"' -> "
                  << (is_any_whitespace(test.input[0]) ? L"空白" : L"非空白") << L"\n";
    }

    return 0;
}
相关推荐
qq_1998868741 分钟前
第6板块·第4节:构建系统与多文件项目
c++·人工智能·gpu算力
2601_966949651 小时前
只拿到股票代码还不够:量化程序到底还需要哪些标的信息?——从数据建模开始理解股票元数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
m0_734571761 小时前
深入理解5g <十八>传输块tbsize的计算
开发语言·5g
汉克老师2 小时前
GESP2026年9月认证C++三级( 第三部分编程题(2、分割字符串))精讲
c++·gesp·小学生·学c++编程
估值探索者2 小时前
【Python量化系统工程化 #08】关了 SSH 就停?systemd 让脚本开机自启 + 异常自动拉起
java·c++·人工智能·分类·数据挖掘
RAN11426760083 小时前
1.3第一个程序的介绍
开发语言·qt
天若有情6733 小时前
C++花式魔改!手写头文件复刻Java语法,彻底打破编码思维定式
java·c++·语言做语言·jac++
qq_199886873 小时前
第7板块·第3节:CUTLASS 的 GEMM 实现与优化策略
c++·人工智能·gpu算力·cuda
hetao17338373 小时前
2026-09-17 hetao1733837 的刷题记录
c++·算法
blue_ice .3 小时前
Verilog DDS 数字信号发生器:DAC 输出模拟波形与 ADC 回采观测
开发语言·单片机·嵌入式硬件·fpga开发