为什么我无法使用“\ x”
初始化字符串string s = "\x"
如果我以后写的话会很有用:
int grade = 0;
while (cin >> grade)
if (grade < 60)
cout << "Your grade letter is F!";
else {
x = 50 - grade/10;
s = s + static_cast<string>(x);
cout << "Your grade letter is " << s << endl;
}
我更喜欢使用转义序列计算来设置成绩字母的答案。
答案 0 :(得分:4)
因为语法禁止它。字符串文字中的\x
序列是一个前缀,表示“此处是字符的十六进制代码”,但您尝试省略代码部分。这意味着无法解析文字并找出要放入字符串的字符。
请注意,这是编译时的事情,只需查看文字本身,就必须能够计算字符串文字所代表的字符序列。
答案 1 :(得分:2)
您误解了转义序列的处理方式。它们是在编译时计算的,而不是在运行时计算的。换句话说,当你写
"\x48"
它在运行时不会成为包含四个字符的字符串;编译器在程序运行之前将其转换为单字符字符串。
您也误解了static_cast<...>
:如果x
不而不是std::string
,则将其静态转换为字符串会导致错误;如果它是std::string
,则静态转换将不起作用。
您可以在运行时创建单字符字符串,并将字符代码放入其唯一的字符中,如下所示:
int grade = 83; // <<<=== 1..100
grade--;
int gradeLetter = g < 60 ? 'F' : ('A' + (100-grade)/10);
// At this point you can do the output:
cout << "Your grade is " << gradeLetter << endl;
// If you must have a string, do this:
string gradeStr(1,gradeLetter);
cout << "Your grade is " << gradeStr << endl;