ezd*_*ena 0 c++ string std substr leveldb
我有一个字符串,实际上包含一个数字和一个字符串,,例如,由"12,fooBar".
我想将它放入分离的变量中,即数字输入unsigned int myNum和字符串输入std::string myStr.
我有以下剪辑代码:
size_t pos1=value.find(',');
std::cout << value.substr(0, pos1) << " and "
<< (value.substr(0, pos1)).c_str() << std::endl;
Run Code Online (Sandbox Code Playgroud)
这产生了12 and 1.我错过了什么?2第二部分发生了什么?
注意:我将问题隔离到了这段代码中.我需要c_str()通过它atoi来获得unsigend int.在这里,我不想打印第二部分.
更新:我实际上从levelDB获取字符串Get.如果我把一个像我放在这里的测试字符串,它就可以了.
发布的代码生成相同的子字符串:value.substr(0, pos1).请注意,std :: string :: substr()不会修改对象,但会返回一个新对象std::string.
例:
#include <iostream>
#include <string>
int main ()
{
std::string value ="12,fooBar";
unsigned int myNum;
std::string myStr;
const size_t pos1 = value.find(',');
if (std::string::npos != pos1)
{
myNum = atoi(value.substr(0, pos1).c_str());
myStr = value.substr(pos1 + 1);
}
std::cout << myNum << " and "
<< myStr << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
12和fooBar
编辑:
如果unsigned int是唯一需要的部分,那么以下内容将起作用:
unsigned int myNum = atoi(value.c_str());
Run Code Online (Sandbox Code Playgroud)
因为atoi()将停在第一个非数字字符(不包括可选的前导-或+),在这种情况下是,.