我是初学者,我正在学习C++中的动态分配。
我想得到一个特定的字符串长度,无论我输入韩语还是英语。所以我使用wstring。然而,就像wstring.length()或wstring.size()仍然是一个多字节系统一样,韩语返回2字节,英语返回1字节。
void ex_03() {
std::wcout << endl<< "Your Input : " << endl;
wstring inputval;
std::wcin >> inputval;
int slength = inputval.size();
wchar_t* p = new wchar_t[slength];
int cnt = 0;
for (wchar_t a : inputval) {
p[cnt] = a;
cnt++;
}
std::wcout << endl << "your Input length : " << slength << endl << "String is : " << p;
delete[] p;
}
字符串
我想用wstring..但它是奇怪的..
1条答案
按热度按时间plicqrtu1#
假设你的任务是:
写一个程序,接收一个字符串作为输入,然后使用new运算符将其存储在动态分配的内存中。程序的输出应该是字符串的长度和字符串本身。
.你甚至不需要使用
std::wcout
和std::wcin
;这个任务可能只给你英语输入,std::string
就足够了。另请参阅Getting the actual length of a UTF-8 encoded std::string?以计算UTF-8字符串中的代码点。假设您的
std::cin
提供UTF-8字符串(几乎肯定会),您可以使用这种方法。然而,即使在UTF-8字符串中计算代码点也是不够的,因为有些字素由多个代码点组成,例如
é
(U+00E9
,拉丁小写字母E),它也可以通过组合锐角重音(U+0301
)和基本字母e
(U+0065
)来形成。此外,梵文字母Qa
क़
(U+0958
)也表示为:U+0915
)U+093C
)还有很多其他的例子。关键是获取字符串的字素长度是非常复杂的,并且可能不是任务所要求的。参见Cross-platform iteration of Unicode string (counting Graphemes using ICU)