我必须在C++中的正则表达式中使用unicode范围.基本上我需要的是有一个正则表达式来接受所有有效的unicode字符.我只是尝试了测试表达式并面临一些问题.
std::regex reg("^[\\u0080-\\uDB7Fa-z0-9!#$%&'*+/=?^_`{|}~-]+$");
Run Code Online (Sandbox Code Playgroud)
问题出在\\u哪?
我来自python,你可以使用'string [10]'按顺序访问一个字符.如果字符串是用Unicode编码的,它会给我预期的结果.但是当我在C++中对字符串使用索引时,只要字符是ASCII就可以工作,但是当我在字符串中使用Unicode字符并使用索引时,在输出中我将得到像/ 201这样的八进制表示.例如:
string ramp = "Ðð??ŠšÝýÞþŽž";
cout << ramp << "\n";
cout << ramp[5] << "\n";
Run Code Online (Sandbox Code Playgroud)
输出:
Ðð??ŠšÝýÞþŽž
/201
Run Code Online (Sandbox Code Playgroud)
为什么会发生这种情况,如何在字符串表示中访问该字符,或者如何将八进制表示转换为实际字符?
我无法使用C++中的tolower()函数将字符串转换为小写.使用普通字符串时,它会按预期工作,但不会成功转换特殊字符.
我如何使用我的功能:
string NotLowerCase = "Grüßen";
string LowerCase = "";
for (unsigned int i = 0; i < NotLowerCase.length(); i++) {
LowerCase += tolower(NotLowerCase[i]);
}
Run Code Online (Sandbox Code Playgroud)
例如:
你可以看到,3和4没有按预期工作
我该如何解决这个问题?我必须保留特殊字符,但是小写.
我可以计算 std::string 包含的“字符数”而不是字节数吗?例如,std::string::size返回std::string::length字节数(字符):
std::string m_string1 {"a"};\n// This is 1\nm_string1.size();\n\nstd::string m_string2 {"\xd1\x97a"};\n// This is 3 because of Unicode\nm_string2.size();\nRun Code Online (Sandbox Code Playgroud)\n有没有办法获取字符数?例如要获得它们m_string2有2个字符。