繁体   English   中英

接受扩展的ASCII码作为C ++中的输入

[英]Accepting extended ASCII codes as input in C++

考虑到世界上某些城市名​​称将其作为字符,我的程序不接受诸如“à”之类的符号。 我正在使用C ++。 我已经尝试过各种输入流,例如getline(cin,string),fgets等。 收集输入中的所有这些形式请参见“ ...”处的特殊符号。

这是Visual Studio 2015中制作的Windows控制台应用程序

例如

string funnyChar = "à";
getline(cin, checkFunny);
if (checkFunny.compare(funnyChar) == 0)
//do things

用户输入àero

ALT + 0224ero

或用户输入àeroas

ALT + 133ero

在代码中,输入流无法在if语句中看到按原样输入的替代代码

if(checkFunny.compare(funnyChar)==0)

将永远无法工作。

或多或少,我需要能够接受这些(任何)特殊字符,以便我可以保存它们,然后在以后显示它们,但是,也不接受非常特殊的字符,例如†(alt + 0134)

如果您试图在程序的参数列表中使用这些字符,那是不可能的。 main必须声明为main(void)','main(int argc,char ** argv)'或语义等效项。 我相信您会需要“ main(int argc,wchar_t ** argv)”之类的东西,但该标准不允许这样做。

如果您只是想在其他地方获取数据之后再处理数据,我会说尝试这些功能的宽字符版本。 例如fgetwc。 大概是这样的。

#include <iostream>
#include <string>
int main() {
  std::locale loc("");
  std::locale::global (loc);
  wcin.imbue(loc);
  std::wstring city;
  std::wcout << L"Enter your city: ";
  std::wcin >> city;
  std::wcout << L"What's it like in " << city << "?\n";
}

http://www.cplusplus.com/reference/cwchar/

C ++通常不会在源代码中编码扩展字符(通常是ASCII,UTF-7)。 尝试

string funnyChar = "\x85";

它应该按照您期望的方式开始工作。

stdinstdout模式设置为U16可以解决问题。 检查以下代码。 (请注意,仅当您要再次输出相同字符时,才需要设置stdout 。)

#include <iostream>
#include <string>
#include <io.h>
#include <fcntl.h>

int main()
{
    _setmode(_fileno(stdin), _O_U16TEXT);
    _setmode(_fileno(stdout), _O_U16TEXT);
    std::wstring funnyChar(L"à");
    std::wstring checkFunny;
    std::wcin >> checkFunny;
    if (checkFunny.compare(funnyChar) == 0)
        std::wcout << L"Yay" << std::endl;
    std::wcout << checkFunny << std::endl;
    return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM