如何检查日语或英语字符
How to check japanese or english character
我的代码:
std::string st = "名前hlong";
for (int i = 0; i < st.lenght(); i++)
{
char *ch = st[i];
if ((int)ch <= 255))
{
//Character is latin.
}
else
{
//Character is japanese
}
}
我想数一下日语和英语字符的数量。但这行不通。请帮我解决这个问题。谢谢所有。
实际上,您不应该使用std::string,因为std::string是面向字节的,而且日文字符不能表示为单个字节。您应该使用std::wstring(或在c++ 11中std::u16string
和std::u32string
用于UTF-16和UTF-32)。
考虑下面的c++ 11代码:
#include <string>
#include <iostream>
#include <iomanip>
using namespace std;
int main(void) {
wstring s = L"Привет , 名前 hlong";
for(wchar_t c: s)
cout << "Char code = 0x" << hex << int(c) << endl;
return 0;
}
使用GCC-4.7编译,如下g++ -finput-charset=utf-8 -std=c++11 test_wstring.cc -o test_wstring
并产生以下输出(0x20代表空格字符):
Char code = 0x41f
Char code = 0x440
Char code = 0x438
Char code = 0x432
Char code = 0x435
Char code = 0x442
Char code = 0x20
Char code = 0x2c
Char code = 0x20
Char code = 0x540d
Char code = 0x524d
Char code = 0x20
Char code = 0x68
Char code = 0x6c
Char code = 0x6f
Char code = 0x6e
Char code = 0x67
您可能会看到标准ASCII字符在0-0xFF范围内,西里尔字符是0x400+,日文字符是0x524d和0x540d。您应该查看评论中提到的Unicode表,看看您感兴趣的范围是什么。你也可以考虑std::codecvt设施&要在字节和面向字符的编码之间进行转换,请参见http://en.cppreference.com/w/cpp/locale/codecvt
相关文章:
- C++:从英语到Pig拉丁语
- 英语到猪拉丁语在C++使用特定功能
- 将日语 wstring 转换为 std::string
- WideCharToMultiByte在英语操作系统上不转换日语
- 在基于英语的系统上将 UTF-8 路径转换为宽字符会引发异常
- 这个函数是什么意思(我的英语sry)
- QTextStream,用于打印英语和Unicode 16
- Fileno,Errno:"no"是什么意思?(非英语母语)
- C++莫尔斯到英语
- 英语到摩尔斯电码转换器
- 为什么 std::swap 不适用于<bool> Clang/Win(英语:Clang/Win)下的矢量元素?
- 将非 ASCII 字符转换为英语对应字符C++
- 无法通过字符串循环我的程序以将其从英语翻译成猪拉丁语
- 对于这个英语单词列表来说,什么是好的哈希函数?
- 读取具有日语文本的CSV文件.(C )
- Dtls 客户端不会使用 cookie 发送 ClientHello(英语:ClientHello)
- 如何在C 中获取,存储和打印非英语字符串
- 如何在Windows日语系统中打印日语字符
- 如何发现字节读取是日语还是英语
- 如何检查日语或英语字符