将单个字符转换为 std::string 前置 \x01
Converting a single char to std::string prepends \x01
我正在尝试从以 std::string
作为键的无序映射中接收值,其中一些字符串仅包含一个字符。我的所有输入都来自 std::stringstream
,我从中获取每个值并将其转换为字符,然后使用
将其转换为字符串
std::string result {1, character};
,根据 documentation and this answer.
似乎是有效的
但是,当我这样做时,字符串会添加一个 \x01 前缀(对应于值 1)。这使得在地图中找不到该字符串。我的调试器还确认该字符串的大小为 2,值为“\x01H”。
为什么会发生这种情况,我该如何解决?
#include <iostream>
#include <sstream>
#include <unordered_map>
int main()
{
const std::unordered_map<std::string, int> map = { {"H", 1}, {"BX", 2} };
std::stringstream temp {"Hello world!"};
char character = static_cast<char>(temp.get()); // character is 'H'
std::string result {1, character}; // string contains "\x01H"
std::cout << result << " has length " << result.size() << std::endl; // H has length 2
std::cout << map.at(result) << std::endl; // unordered_map::at: key not found
}
您使用的是大括号 {}
,而不是圆括号 ()
,这与您 link 提出的问题不同。这使它成为一个初始化列表,而不是您期望的构造函数。
我正在尝试从以 std::string
作为键的无序映射中接收值,其中一些字符串仅包含一个字符。我的所有输入都来自 std::stringstream
,我从中获取每个值并将其转换为字符,然后使用
将其转换为字符串
std::string result {1, character};
,根据 documentation and this answer.
但是,当我这样做时,字符串会添加一个 \x01 前缀(对应于值 1)。这使得在地图中找不到该字符串。我的调试器还确认该字符串的大小为 2,值为“\x01H”。
为什么会发生这种情况,我该如何解决?
#include <iostream>
#include <sstream>
#include <unordered_map>
int main()
{
const std::unordered_map<std::string, int> map = { {"H", 1}, {"BX", 2} };
std::stringstream temp {"Hello world!"};
char character = static_cast<char>(temp.get()); // character is 'H'
std::string result {1, character}; // string contains "\x01H"
std::cout << result << " has length " << result.size() << std::endl; // H has length 2
std::cout << map.at(result) << std::endl; // unordered_map::at: key not found
}
您使用的是大括号 {}
,而不是圆括号 ()
,这与您 link 提出的问题不同。这使它成为一个初始化列表,而不是您期望的构造函数。