c++ 我如何返回一个字母相同的大小,无论语言

mrwjdhj3  于 2024-01-09  发布在  其他
关注(0)|答案(1)|浏览(244)

我是初学者,我正在学习C++中的动态分配。
我想得到一个特定的字符串长度,无论我输入韩语还是英语。所以我使用wstring。然而,就像wstring.length()或wstring.size()仍然是一个多字节系统一样,韩语返回2字节,英语返回1字节。

  1. void ex_03() {
  2. std::wcout << endl<< "Your Input : " << endl;
  3. wstring inputval;
  4. std::wcin >> inputval;
  5. int slength = inputval.size();
  6. wchar_t* p = new wchar_t[slength];
  7. int cnt = 0;
  8. for (wchar_t a : inputval) {
  9. p[cnt] = a;
  10. cnt++;
  11. }
  12. std::wcout << endl << "your Input length : " << slength << endl << "String is : " << p;
  13. delete[] p;
  14. }

字符串
我想用wstring..但它是奇怪的..

plicqrtu

plicqrtu1#

假设你的任务是:
写一个程序,接收一个字符串作为输入,然后使用new运算符将其存储在动态分配的内存中。程序的输出应该是字符串的长度和字符串本身。
.你甚至不需要使用std::wcoutstd::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)和基本字母eU+0065)来形成。
此外,梵文字母Qa क़U+0958)也表示为:

  • 天成文书(梵文)字母Ka(U+0915
  • 天成文书(梵文)标记Nukta(U+093C

还有很多其他的例子。关键是获取字符串的字素长度是非常复杂的,并且可能不是任务所要求的。参见Cross-platform iteration of Unicode string (counting Graphemes using ICU)

相关问题