我正在std::string使用此代码修剪一个long 以使其适合文本容器.
std::string AppDelegate::getTrimmedStringWithRange(std::string text, int range)
{
if (text.length() > range)
{
std::string str(text,0,range-3);
return str.append("...");
}
return text;
}
Run Code Online (Sandbox Code Playgroud)
但在其他语言的情况下,如HINDI "??????"长度std::string是错误的.
我的问题是如何在所有测试用例中检索std :: string的准确长度.
谢谢
长度std::string不是"错误的"; 你只是误解了它的含义.一个std::string店字节,在你选择的编码不是"字符".它兴高采烈地不了解那一层.因此,长度std::string是它包含的字节数.
要计算这样的"字符",您需要一个支持分析所选编码的库,无论它是什么.
只有当您选择的编码与ASCII兼容时,您才能计算字节并完成它.
假设您使用的是UTF-8,您可以将字符串转换为简单的(hah!)Unicode并计算字符数.我从rosettacode中抓住了这个例子.
#include <iostream>
#include <codecvt>
int main()
{
std::string utf8 = "\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9d\x84\x8b"; // U+007a, U+00df, U+6c34, U+1d10b
std::cout << "Byte length: " << utf8.size() << '\n';
std::wstring_convert<std::codecvt_utf8<char32_t>, char32_t> conv;
std::cout << "Character length: " << conv.from_bytes(utf8).size() << '\n';
}
Run Code Online (Sandbox Code Playgroud)