我尝试用 C++ 中的 if 语句制作一个 ASCII 转换器,但声明输入变量时我有点困惑。这是主要问题。
我尝试使用 typeid().name() ,然后使用 typeid() ,最后使用 sizeof() 函数, 这是我尝试过的
#include<iostream>
int main()
{
char character;
std::cout << "Insert Your Characater: ";
std::cin >> character;
if (sizeof(character) == 1)
{
std::cout << "Your Character Refers to : " << int(character);
}
else if (sizeof(character) == 4)
{
std::cout << "\nYour Character Refers to :" << char(character);
}
else {
std::cout << "\nSomething Went Wrong ... Enter a Number[1,2,3,.....] or an Alphapet[A,a,B,b,C,c,.....] or a Character[(,),-,_,...]";
}
}
有什么建议来完成这件事吗?
std::cin
是char
的流(大多数时候,它是单字节字符)。如果您想从标准输入接受多字节字符,C++ 为您提供了 std::wcin
。这将为您提供 wchar_t
流,但编码取决于操作系统。在 Linux 上,wchar_t
通常 4 个字节;在 Windows 上,它通常 2 个字节; “默认情况下”输入流的编码更加依赖于操作系统和实现。
如果你有一个
wchar_t
变量包含UTF编码的符号,检查它是否是ASCII符号很容易:
wchar_t sym;
std::wcin >> sym;
if((sym & 0xffffff80) == 0) { //higher bits are 0
std::wcout << L"ASCII symbol: code " << (int)sym << L", symbol '" << sym << L"'\n";
} else {
std::wcout << L"Non-ASCII symbol: code " << (int)sym << L", symbol '" << sym << L"'\n";
}