我有以下代码:
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main()
{
string rus = "абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦШЩЪЫЬЭЮЯ";
string lat = "abvgděëžzijklmnoprstufhcčšŝŭeûâABVGDĚËŽZIJKLMNOPRSTUFHCČŠŜŬEÛÂ";
ifstream gdata("data.txt");
if(!gdata){
gdata.open("data.txt");
}
string temp;
while(gdata){gdata >> temp;}
gdata.close();
ofstream sdata("data.txt", ios::out | ios::trunc);
for(unsigned int i = 0; i < temp.length(); i++){
int index = rus.find(temp[i]);
if(index == -1){sdata << temp[i];}
else{sdata << lat[index];}
}
sdata.close();
return 0;
}
我想从文件中阅读俄语西里尔文。然后,程序将找到字符串 rus 中每个字符的索引,如果找到该字符,则会在 lat 字符串中找到相应的字母。然后将这封信写入文件。 不幸的是,当我在文件中键入内容然后运行程序时,我会得到奇怪的输出,例如带有随机方块的@&gt; A8(由于某种原因在这里不可见)。如何让我的程序正确读取西里尔字母? 我已经在这里看了10个关于类似主题的问题,但是考虑到我是C ++的初学者,没有明确的编码,我一点也不理解答案,主要是因为没有提供我能理解的例子。
此外,即使大多数字符都是拉丁文并且文本中只有一个西里尔字母,整个文本也会变成格式化为随机字母,如@&gt; A8