当我运行以下代码添加str.front() str.back时,它给了我200个,但为什么
When i run the following code adding str.front() + str.back it gives me 200 but why?
string str = "abcdefg";
cout << str.back() + str.front();
C 控制台:200
#include <iostream>
int main() {
std::string str = "abcdefg";
for(int v : str) {
std::cout << v << " " << static_cast<char>(v) << "n";
}
}
可能的输出:
97 a // front()
98 b
99 c
100 d
101 e
102 f
103 g // back()
97 103 = 200
当我运行以下代码添加str.front() str.back时,它给了我200个,但是为什么?
字符被编码为整数。char
是整数类型。当算术操作(例如加法)的操作数小于int
的整数类型时,这些操作数被促进到int
,这也是表达式的结果类型。这就是为什么输出不是编码字符,而是整数的十进制表示。
为什么值200,这是如此碰巧的是,在您的系统的字符编码中,代表'a'
的值以及代表'g'
总计200的值。
您正在添加两个 char
s,这会导致整数。
如果要将两个字符组合到字符串,则必须至少提供其中一种字符串类型,例如:
cout << str.back() + string{str.front()};
或
cout << str.back() + str.substr(0, 1);
如果您只想输出两个字符 - 您可以一次输出一个字符:
cout << str.back() << str.front();
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 为什么在全局范围内使用"extern int a"似乎不行?
- 为什么无论你输入什么,这"while(cin.get(str,3))"只运行一次?
- 这是 boost::filesystem 中的错误吗?为什么 boost::filesystem::p ath::str
- 为什么"return (str);"推断出与C++中的"return str;"不同的类型?
- 为什么在使用字符指针 str1 而不是 str 时会出现分段转储?
- 为什么 str != "hello" &&"goodbye"不起作用?
- istringstream-function string_to_int不能接受C-STR,为什么
- 当我运行以下代码添加str.front() str.back时,它给了我200个,但为什么
- 为什么不会(真;真;std::cin>>str) 工作?
- 为什么不能在常量字符 * str 上应用 str.find_last_of( )
- 为什么不;t strlen(.)应为const char*const str,而不是const char*
- 为什么当我们反转此函数中的字符串时,char *str 的指针没有改变?
- 为什么sizeof(str.substr(0,3).c_str())给我8
- 为什么你需要在新字符(str.length())上添加一个
- 为什么我不能使用 static_cast<const char**>(str) 而不是 (const char**)str?
- 为什么我的str [i]输出是空的?
- 为什么stringstream::str()截断string
- 为什么mem_fn在与smatch::str一起使用时编译失败?
- 为什么我不能在 C++ 中使用 str.erase(str.begin() + index) 擦除字符串中的字符?