C++如何过滤出字符串的中文(GBK、UTF-8)

下面是完整的攻略:

1. 判断字符串编码格式

在过滤字符串中的中文之前,我们需要先判断字符串的编码格式。因为GBK和UTF-8编码下的中文字符的字节长度是不同的。

1.1 GBK编码格式

在GBK编码下,每个中文字符由2个字节组成。所以我们可以通过判断每个字符的字节长度是否为2来判断字符串的编码格式是GBK。

bool isGBK(const char* str) {
    for (int i = 0; str[i]; i++) {
        // 编码范围:0x80 ~ 0xFE
        if (str[i] & 0x80) {
            if (!(str[i+1] && (str[i+1] & 0x80))) {
                return false;
            }
            i++;
        }
    }
    return true;
}

1.2 UTF-8编码格式

在UTF-8编码下,每个中文字符由3个字节组成。所以我们可以通过判断每个字符的字节长度是否为3来判断字符串的编码格式是UTF-8。

bool isUTF8(const char* str) {
    for (int i = 0; str[i]; i++) {
        if (str[i] & 0x80) {  // 这是UTF-8编码的中文字符的特征
            if (!((str[i] & 0xE0) == 0xE0 && (str[i+1] & 0x80) && (str[i+2] & 0x80))) {
                return false;
            }
            i += 2;
        }
    }
    return true;
}

2. 过滤中文

我们已经知道了如何判断字符串的编码格式,接下来就可以过滤出中文字符了。

2.1 过滤GBK编码字符串中的中文

void filterChineseFromGBK(const char* str) {
    for (int i = 0; str[i]; i++) {
        if (str[i] & 0x80) {   // 中文字符的字节长度为2
            printf("%c%c", str[i], str[i+1]);
            i++;
        }
    }
}

2.2 过滤UTF-8编码字符串中的中文

void filterChineseFromUTF8(const char* str) {
    for (int i = 0; str[i]; i++) {
        if (str[i] & 0x80) {   // 中文字符的字节长度为3
            printf("%c%c%c", str[i], str[i+1], str[i+2]);
            i += 2;
        }
    }
}

以上就是C++如何过滤出字符串的中文(GBK、UTF-8)的完整攻略,希望对你有所帮助!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++如何过滤出字符串的中文(GBK、UTF-8) - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • Win7旗舰版升级Win10提示错误代码C1900107的解决方法

    下面是详细讲解“Win7旗舰版升级Win10提示错误代码C1900107的解决方法”的完整攻略。 问题描述 在升级Win7旗舰版到Win10时,可能会出现错误代码C1900107的提示,导致升级失败。这个错误通常是由于系统内存不足或硬盘空间不足所导致的。 解决方法 针对这个问题,可以采取以下几个步骤来解决: 步骤1:清理硬盘空间 由于Win10系统占用的空间…

    C 2023年5月23日
    00
  • win10系统运行帝国时代2提示错误代码0xc0000022的原因及解决方法

    问题描述 当使用win10系统运行帝国时代2游戏时,会提示错误代码0xc0000022,导致游戏无法正常运行。那么这个错误的出现原因是什么?该如何解决呢? 问题原因 错误代码0xc0000022通常是由于系统权限问题引起的,可能是由于以下原因导致: 游戏所在的目录或文件夹没有设置读写权限。 游戏所在的目录或文件夹被防病毒软件或其他安全软件阻止了读取或写入操作…

    C 2023年5月24日
    00
  • C语言中程序环境和预处理的详细图文讲解

    针对“C语言中程序环境和预处理的详细图文讲解”这一主题,我会为你提供一份完整攻略。本攻略主要分两部分:程序环境和预处理。下面就分别进行详细讲解。 程序环境 什么是程序环境? 程序环境指的是程序执行的环境,包括操作系统、硬件设备等因素。C语言的程序需要在特定的环境下才能执行。 程序的执行过程 当程序运行时,它需要在内存中占用一定的空间。程序在执行过程中分为以下…

    C 2023年5月23日
    00
  • C 语言编写一个计算器界面(可视化界面和多功能)

    下面是详细讲解“C 语言编写一个计算器界面(可视化界面和多功能)”的完整攻略。这里我们将使用C语言以及图形库GraphWin来实现一个可视化界面的计算器程序,并实现基本的加减乘除运算以及数字输入等多种功能。 确认环境 首先要确定你已经正确安装了 C 语言编译器和图形库GraphWin(也叫作 WinBGIm),如果你还没有则需要先安装。在 Windows 操…

    C 2023年5月23日
    00
  • 比特币账本存在哪里?比特币账本是谁在记账?

    比特币是一种去中心化的加密货币,其账本被称为区块链,所有的交易记录都会被记录在这个分布式账本上。在比特币网络中,没有一个具体的机构或个人承担记账的角色,而是由所有参与的矿工通过计算机算力获得区块链账本更新的权利,并依次将记录的新交易打包成新的区块,并将其添加到链的尾部,为整个系统提供保障。 具体来说,比特币的记账过程是由矿工通过一系列计算机算法竞争产生的,其…

    C 2023年5月22日
    00
  • C语言 strcmp()函数

    C语言 strcmp()函数使用攻略 介绍 strcmp()函数是C语言标准库中的一员,是string.h头文件中的字符串比较函数,用于比较两个字符串是否相等。该函数会依次比较两个字符串相应位置的字符的ASCII码大小关系,直到出现不同字符或遇到字符串结束符’\0’。如果两个字符串完全相同,则该函数返回0;如果两个字符串在某个位置上出现不同,则该函数返回第一…

    C 2023年5月9日
    00
  • Json格式详解

    Json格式详解 什么是Json? JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,并易于机器解析和生成。它基于JavaScript语言的一个子集。JSON采用键值对的方式来描述信息,通过大括号{}包围对象,通过方括号[]包围数组。 Json格式规则 数据在名称/值对中 数据由逗号分隔 大括号{}包…

    C 2023年5月23日
    00
  • C++ OpenCV实现图像双三次插值算法详解

    C++ OpenCV实现图像双三次插值算法的攻略如下: 1. 阅读关于双三次插值算法的资料 双三次插值是一种常见的图像缩放算法,它可以将一张低分辨率的图像缩放到更高分辨率,而不会产生锯齿或失真。 2. 安装OpenCV并编译环境 安装OpenCV并配置好编译环境,这里以Visual Studio为例。能够正常编译运行OpenCV的程序。 3. 创建一个空白的…

    C 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部