Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++检查UTF8字符串包含指定字符_C++_Utf 8 - Fatal编程技术网

C++检查UTF8字符串包含指定字符

C++检查UTF8字符串包含指定字符,c++,utf-8,C++,Utf 8,给定utf8字符串,如何知道它包含不允许的指定字符 要求utf8字符串只能包含英文字符和中文字符。任何其他字符,如符号、数字、空格、“\n”。。。这是不允许的 正则表达式可以做这项工作吗 bool legal(const std::string& s) { // s is utf8 string //?? } 您可以将std::string转换为所述的utf32代码点向量,然后对它们进行迭代并检查范围,但是我无法提供中文字母的utf32值范围,并且从您对问题的评论判断,这可能是一

给定utf8字符串,如何知道它包含不允许的指定字符

要求utf8字符串只能包含英文字符和中文字符。任何其他字符,如符号、数字、空格、“\n”。。。这是不允许的

正则表达式可以做这项工作吗

bool legal(const std::string& s) { // s is utf8 string
   //??
}
您可以将std::string转换为所述的utf32代码点向量,然后对它们进行迭代并检查范围,但是我无法提供中文字母的utf32值范围,并且从您对问题的评论判断,这可能是一个问题

编辑


如下面的评论所述,如果您知道需要验证的字符在2字节范围内,您可以使用utf16。

您能给我一个可以包含在UTF-8编码字符串中的汉字示例吗?任何汉字,任何英文字符都是允许的。你可能会发现将所有中文字符放入UTF-8编码的字符串是一个挑战。其他一些语言可以像python一样做到这一点。但我不知道std::regex是否能做到这一点。如果不能,唯一的办法似乎是检查汉字的编码范围。你应该在字符串中走动,将UTF-8序列动态解码为Unicode码点数;然后将它们与您允许的范围进行比较。我想您会倾向于使用UTF-16和std::wstring。@Bathsheba,正如我在回答中所说的,我对实际的代码范围不是很熟悉,但快速查看a表明,汉字实际上超出了2字节的范围,因此,纯粹从方便的角度来看,iterating utf32代码点更为通用。甚至不需要实际转换整个字符串,在UTF-8字符串中迭代代码点非常容易,实际上,使用UTF-8 cpp之类的库非常简单。