C++ 从字符串中提取整数
我有字符串“y x名称”,y和x的数目在0到100之间。从这个字符串中,什么是提取C++中的“x”到整数变量的最好方法。 看来这个线程有类似的问题,可能有帮助; 使用两个呼叫,例如:C++ 从字符串中提取整数,c++,string,integer,C++,String,Integer,我有字符串“y x名称”,y和x的数目在0到100之间。从这个字符串中,什么是提取C++中的“x”到整数变量的最好方法。 看来这个线程有类似的问题,可能有帮助; 使用两个呼叫,例如: #包括 #包括 使用名称空间std; int main(){ char const*s=“1.99-name”; char*endp; 无符号长l1=strtoul(s和endp,10); 如果(endp==s | |*endp!='。){ cerr您可以通过拆分字符串,并将其直接转换为整数类型。while循环中的
#包括
#包括
使用名称空间std;
int main(){
char const*s=“1.99-name”;
char*endp;
无符号长l1=strtoul(s和endp,10);
如果(endp==s | |*endp!='。){
cerr您可以通过
拆分字符串,并将其直接转换为整数类型。while循环中的第二个数字就是您想要的数字,请参见示例代码:
template<typename T>
T stringToDecimal(const string& s)
{
T t = T();
std::stringstream ss(s);
ss >> t;
return t;
}
int func()
{
string s("100.3-name");
std::vector<int> v;
std::stringstream ss(s);
string line;
while(std::getline(ss, line, '.'))
{
v.push_back(stringToDecimal<int>(line));
}
std::cout << v.back() << std::endl;
}
模板
T stringToDecimal(常数字符串和s)
{
T=T();
标准::stringstream ss(s);
ss>>t;
返回t;
}
int func()
{
字符串s(“100.3-name”);
std::向量v;
标准::stringstream ss(s);
弦线;
while(std::getline(ss,line,“.”)
{
v、 向后推(线到特定线);
}
std::cout您可以使用,它利用了billz的答案中的流:
伪代码如下所示(在该示例中,索引可能是错误的):
std::string yxString=“56.74-name”;
size_t xStart=yxString.find(“.”+1;
size_t xLength=yxString.find(“-”)-xStart;
intx=boost::词法转换(yxString+xStart,xLength);
解析错误可以通过词法转换引发的异常来处理。
对于更灵活/更强大的文本匹配,我建议。@billz:您能解释一下ss>>t吗?ss>>t
将字符串(可以是100
或3-name
)转换为t,它只写整数类型并切掉不相关的字符串。就像atoi函数一样。请参阅
template<typename T>
T stringToDecimal(const string& s)
{
T t = T();
std::stringstream ss(s);
ss >> t;
return t;
}
int func()
{
string s("100.3-name");
std::vector<int> v;
std::stringstream ss(s);
string line;
while(std::getline(ss, line, '.'))
{
v.push_back(stringToDecimal<int>(line));
}
std::cout << v.back() << std::endl;
}
std::string yxString = "56.74-name";
size_t xStart = yxString.find(".") + 1;
size_t xLength = yxString.find("-") - xStart;
int x = boost::lexical_cast<int>( yxString + xStart, xLength );