我想从用户输入中查找土耳其语字符。这是我的代码:
#include <iostream>
#include <string>
using namespace std;
int main()
{
setlocale(LC_ALL, "Turkish");
string input;
string chars = "çığöşü";
cout << "Input: ";
getline(cin, input);
cout << "Turkish Characters: " << chars << "\n";
cout << "Your input: " << input;
return 0;
}
运行它时,我得到了:
Input: çığöşü
Turkish Characters: çığöşü
Your input: ┼?§"Y?
如果我不使用setlocale
,我会得到:
Input: çığöşü
Turkish Characters: ²÷■³
Your input: çığöşü
我使用了wstring
,但是它没有任何改变。我想从用户那里获取一些文本,并尝试使用我的字符字符串在文本中查找土耳其字符。是否有捷径可寻? (我使用的是Windows)
答案 0 :(得分:0)
如果您的系统语言不是土耳其语,则"çığöşü"
会被编译为英语或您具有的任何设置,它将以土耳其语中的不同字符集进行匹配。除非在编译器设置中,否则您将* .cpp文件的代码页更改为土耳其语。否则,您必须使用L"çığöşü"
并将其转换为正确的ANSI代码页。
在代码页SetConsoleCP/SetConsoleOutputCP
中使用1254
打印土耳其语。示例:
#include <iostream>
#include <string>
#include <windows.h>
std::string ansi(wchar_t* wbuf, int codepage)
{
int len = WideCharToMultiByte(codepage, 0, wbuf, -1, 0, 0, 0, 0);
std::string shortname;
shortname.resize(len, L'\0');
WideCharToMultiByte(codepage, 0, wbuf, -1, &shortname[0], len, 0, 0);
shortname.resize(len - 1);
return shortname;
}
int main()
{
int codepage = 1254;
SetConsoleOutputCP(codepage);
SetConsoleCP(codepage);
std::cout << ansi(L"çığöşü\n", codepage);
std::string input;
std::cout << "Input: ";
std::getline(std::cin, input);
std::cout << input << "\n";
return 0;
}
建议使用Unicode(不使用特定于Visual Studio的_setmode
)
#include <iostream>
#include <string>
#include <io.h>
#include <fcntl.h>
int main()
{
_setmode(_fileno(stdout), _O_U16TEXT);
_setmode(_fileno(stdin), _O_U16TEXT);
std::wcout << L"çığöşü\n";
std::wstring input;
std::wcout << "Input: ";
std::getline(std::wcin, input);
std::wcout << input << "\n";
return 0;
}
答案 1 :(得分:0)
尝试此功能:
string changeTrCharacters(string text){
replace (text.begin(),text.end(),-108,111); // ö to o
replace (text.begin(),text.end(),-103,79); // Ö to O
replace (text.begin(),text.end(),-127,117); // ü to u
replace (text.begin(),text.end(),-102,85); // Ü to U
replace (text.begin(),text.end(),-115,105); // ı to i
replace (text.begin(),text.end(),-104,73); // İ to I
replace (text.begin(),text.end(),-89,103); // ğ to g
replace (text.begin(),text.end(),-90,71); // Ğ to G
replace (text.begin(),text.end(),-97,115); // ş to s
replace (text.begin(),text.end(),-98,83); // Ş to Ş
replace (text.begin(),text.end(),-121,99); // ç to c
replace (text.begin(),text.end(),-128,67); // Ç to C
return text;
}
在主函数中,将cout << "Your input: " << input;
行更改为cout << "Your input: " << changeTrCharacters(input);