【发布时间】:2016-11-03 17:30:55
【问题描述】:
我正在尝试从控制台读取西里尔字母(“Иванчо говори само глупости”),但我得到的只是“??????”。我第一次用 C++ 编写,如果有人帮助我解决这个问题,我将非常感激。
这是我的代码
#include<iostream>
#include<string>
#include<map>
#include<Windows.h>
#include<clocale>
using namespace std;
bool CheckLetters(int letter)
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
bool isCyrillic = ('\u0410' <= letter && letter <= '\u044f');
if ((letter >= 'a' && letter <= 'z')
|| (letter >= 'A' && letter <= 'Z')
|| isCyrillic)
{
return true;
}
return false;
}
int main()
{
string input;
map<unsigned char, int> letters;
getline(cin, input);
for (int i = 0; i < input.size(); i++)
{
unsigned char currentLetter = input[i];
if (CheckLetters(currentLetter))
{
map<unsigned char, int>::iterator elementIter = letters.find(currentLetter);
if (elementIter == letters.end())
{
letters[currentLetter] = 1;
}
else
{
letters[currentLetter] ++;
}
}
}
for (map<unsigned char, int>::iterator current = letters.begin();
current != letters.end(); current++)
{
pair<unsigned char, int> currentElement = *current;
cout << currentElement.first << " " << currentElement.second <<endl;
}
return 0;
}
【问题讨论】:
-
你试过
wchar_t而不是char吗? -
不,我会尝试:)
-
不,不适用于 wchar_t
-
当然,您还必须使用
w版本作为std::wcin、'std::wsting' 等。
标签: c++