我需要使用最少量的代码获取std::string
的第一个字符。
如果可以从STL std::map<std::string, std::string> map_of_strings
获取一行代码中的第一个字符,那将会很棒。以下代码是否正确:
map_of_strings["type"][0]
修改 目前,我正在尝试使用这段代码。这段代码是否正确?
if ( !map_of_strings["type"].empty() )
ptr->set_type_nomutex( map_of_strings["type"][0] );
set_type
函数的原型是:
void set_type_nomutex(const char type);
答案 0 :(得分:5)
如果您将非空字符串放入map_of_strings["type"]
,那么这应该有效。否则,你将得到一个空字符串,访问其内容可能会导致崩溃。
如果您无法确定字符串是否存在,则可以测试:
std::string const & type = map["type"];
if (!type.empty()) {
// do something with type[0]
}
或者,如果您想避免在地图中添加空字符串:
std::map<std::string,std::string>::const_iterator found = map.find("type");
if (found != map.end()) {
std::string const & type = found->second;
if (!type.empty()) {
// do something with type[0]
}
}
或者您可以使用at
进行范围检查,如果字符串为空则抛出异常:
char type = map["type"].at(0);
或者在C ++ 11中,地图也有类似的at
,您可以使用它来避免插入空字符串:
char type = map.at("type").at(0);
答案 1 :(得分:2)
从您的问题来看,您的问题并不完全清楚,但map_settings["type"][0]
可能出错的原因是返回的字符串可能为空,导致[0]
时出现未定义的行为。如果没有第一个字符,你必须决定你想做什么。这是一种可行的方式。
ptr->set_type_nomutex( map_settings["type"].empty() ? '\0' : map_settings["type"][0]);
它获取第一个字符或默认字符。
答案 2 :(得分:0)
c_str()方法将返回一个指向内部数据的指针。如果字符串为空,则返回指向NULL终止的指针,因此简单的单行代码既安全又容易:
std::string s = "Hello";
char c = *s.c_str();
答案 3 :(得分:-1)
string s("type");
char c = s.at(0);