gpt4 book ai didi

c++ - 我想在 Windows 下使用 C++ 以某种基本方式表示西里尔字符

转载 作者:太空宇宙 更新时间:2023-11-04 13:20:47 25 4
gpt4 key购买 nike

所以我实际上是在尝试编写一个代码,将所有西里尔字母从一个单词转换为相关的拉丁字母。例如,俄语的“я”应该变成а“q”等等。所以,现在我发现了一些我认为是最好和最容易理解的使用西里尔符号的方法,它是:

#include <iostream>
#include <windows.h>

using namespace std;

int main()
{
const char *s = "яятя"; //my constant cyrillic char
char c[10]; //I'll transform it into that
CharToOemA(s, c); //the way I saw on the internet, I have barely understood what it actually does...
cout << c << endl; //This gives me the "яяяя" I need, so I'm happy...

for(int i = 0; i < (int)strlen(c); i++)
{
//So I'm looping my character and want to somehow compare each single char with some kind of representation of the cyrillic "я"
//Somehow using the encoding system of the c++ GNU compiler code blocks 13.12
//Unicode number of "я" - U+044F
if(c[i] == ...) //What could I use?
//tried with '\u044F', but it didn't work
cout << c[i] << " -- this should be a q!" << endl;
}

cout << "Press any key to continue..." << endl;
cin.get();
return 0;
}

我猜这已经被回答了很多次,但我目前还没有找到最正确的方法来处理代码本身中那些该死的西里尔字符串和字符,比较它们并用它们做一些事情.. . 所以如果你能建议一种方法来实现我的目标,我将不胜感激......

最佳答案

由于您还不太确定所需的输入编码,一个简单的入门方法是假设您的输入将采用 UTF-16。

由于您的编译器支持 C++11,我相信以下内容应该适合您:

#include <string>
#include <iostream>

int main() {
std::u16string text = u"яятя";

for (char16_t c : text)
{
if (c == u'я')
std::cout << 'q';
else
std::cout << '?';
}

std::cout << std::endl;
return 0;
}

您会注意到您的代码发生了以下变化:

  • 我正在使用 Unicode 字符串文字:яятя 生成一个 UTF-16 字符串文字。参见 cppreference其他选择
  • 这意味着每个字符的长度都是两个字节,所以我使用 std::u16string 来存储字符串,并使用 char16_t 数据类型来遍历人物

如果您最终想从文件等中读取 UTF-8 编码的文本,您可能希望在读取输入后从 UTF-8 转换为 UTF-16。最现代的 C++ 标准版本和最现代的编译器都支持这样的转换函数:

std::wstring_convert<std::codecvt_utf8_utf16<char16_t>,char16_t> convert;
std::cout << "UTF-8 version: "
<< convert.to_bytes(text)
<< std::endl;

类似地,convert.from_bytes() 用于从 UTF-8 到 UTF-16 的转换。但是您的编译器版本可能还不能正确支持这一点。

关于c++ - 我想在 Windows 下使用 C++ 以某种基本方式表示西里尔字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35374602/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com