C++ 如何检查日语或英语字符

C++ 如何检查日语或英语字符,c++,string,C++,String,我的代码在这里: 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 st=”名前"龙",; 对

我的代码在这里:

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 st=”名前"龙",;
对于(int i=0;i如果((int)ch实际上,您不应该使用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;
}

正如您可能看到的标准ASCII字符在0~0xFF范围内,Cyric字符是0x400 +,日文字符是0x524D和0x540D。您应该检查注释中提到的Unicode表,看看您感兴趣的范围。也可以考虑STD::CODECDVT设备和CO在字节和面向字符的编码之间转换。,请参见

是否要对字符进行分类,即对日文和拉丁文字符进行单独计数?到目前为止,您尝试了哪些方法?哪些方法有效?哪些方法无效?您的代码看起来像什么?您确实知道这些字符及其编码?是的,请帮助我对字符进行分类。std::string st=”名前“长”;//我想计算这个字符串中的数字是日文的。这有帮助吗:-日文字符可以表示为多字节字符,可以检查
std::string
中的字符,只是不能将值与255进行比较。除此之外,我认为你的答案比我的更有用,我会删除我的。如果我们不能谈论UTF-8字符串然后,是的,可以检查给定字节是否属于表示单个字符的字节序列。很可能,在UTF-8字节流中,单个日语字符表示为3个字节。两个字节流中3个字节中的第一个字节名 及前 等于0xE5。但这将是一个相当无聊和复杂的检查,因为它需要对给定字节之前的所有字节序列进行正确解码。因此,通常最好将UTF序列转换为std::wstring,然后使用std::basic_string:
[]
at()的公共字符访问方法
etcYes,我完全同意你不应该使用
std::string
。我之所以发表评论,是因为你的回答似乎暗示你不能使用
std::string
。但也许我读得太多了。
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