本文作者:StubbornHuang
版权声明:本文为站长原创文章,如果转载请注明原文链接!
原文标题:C++ – GBK编码下的全角字符转半角字符
原文链接:https://www.stubbornhuang.com/1846/
发布于:2021年11月30日 9:34:48
修改于:2021年12月02日 22:33:04

1 C++全角字符转半角字符
在一些文章或者网页上的数字在复制到剪切板上面时经常会保持全角输入状态,这个需要将全角字符转换为半角字符。在转换的过程中,中文保持原有状态,中文标点符号保持原有状态,将中文空格清空,其他全角字符转换为半角字符,转换过程可参考以下代码:
#include <iostream>
static std::string DoubleByteCharToSingleByteChar(const std::string& srcStr)
{
std::string dstStr = "";
unsigned char tmp, tmp1;
for (unsigned int i = 0; i < srcStr.length(); i++)
{
tmp = srcStr[i];
tmp1 = srcStr[i + 1];
// 第一个字节是163,标志着是全角字符
if (tmp == 163)
{
dstStr += (unsigned char)srcStr[i + 1] - 128;
i++;
continue;
}
// 汉字
else if (tmp > 163)
{
dstStr += tmp;
dstStr += tmp1;
i++;
continue;
}
// 中文空格
else if (tmp == 161 && tmp1 == 161)
{
dstStr += "";
i++;
continue;
}
else if (tmp == 161 && tmp1 > 161)
{
dstStr += tmp;
dstStr += tmp1;
i++;
continue;
}
else
{
dstStr += tmp;
}
}
return dstStr;
}
int main()
{
std::string input_str = "55555。你好。";
std::string output_str = DoubleByteCharToSingleByteChar(input_str);
std::cout << output_str << std::endl;
}
当前分类随机文章推荐
- C++ - 使用Websocket++编写客户端连接WebSocket服务器并进行通信 阅读3799次,点赞3次
- C++STL容器 - std::map容器修改、元素操作总结 clear,insert,emplace,erase,swap,merge,extract,insert_or_assign等 阅读1047次,点赞0次
- C++ - 阿拉伯数字字符串转换为中文读法的中文字符串,支持小数点 阅读1033次,点赞0次
- C++11 - std::chrono - 使用std::chrono::duration_cast进行时间转换,hours/minutes/seconds/milliseconds/microseconds相互转换,以及自定义duration进行转换 阅读1932次,点赞0次
- C++11 - std::shared_ptr初始化的几种方式 阅读6603次,点赞2次
- C++11 - 使用std::thread在类内部以成员函数作为多线程函数执行异步操作 阅读1871次,点赞0次
- C++ - std::unordered_map中使用结构体或者vector等复杂的数据结构作为Key值 阅读140次,点赞0次
- C++11 - override关键字简要介绍 阅读1910次,点赞0次
- C++11 - 使用std::thread,std::shared_future,std::promise并行化/多线程化for循环,提升处理速度 阅读1285次,点赞0次
- C++ - std::map - 存储动态指针时正确释放内存 阅读3872次,点赞1次
全站随机文章推荐
- 资源分享 - Real-Time Rendering, Second Edition 英文高清PDF下载 阅读1629次,点赞0次
- Duilib - 字体 阅读2793次,点赞0次
- ThreeJS - 直接设置Fbx模型的某个关节的位移和旋转值 阅读1547次,点赞0次
- C++ - std::string与std::wstring相互转换 阅读1532次,点赞0次
- C++11/std::condition_variable - 生产者消费者模型 阅读2601次,点赞0次
- OpenCV - cv::Mat转换为unsigned char*数组或者float*数组,unsigned char*数组或者float*数组转换为cv::Mat 阅读3691次,点赞0次
- ThreeJS - FBXLoader: TGA loader not found, creating placeholder texture for ... 阅读323次,点赞0次
- TensorRT - 使用Polygraphy工具比较onnx模型和TensorRT模型的推理结果是否一致 阅读97次,点赞0次
- 资源分享 - Curves and Surfaces for Computer Graphics 英文高清PDF下载 阅读843次,点赞0次
- WordPress - 使用插件的方式作出类似向主题function.php中添加代码的功能 阅读2370次,点赞0次
评论
164