C++ 从字符串中提取整数

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循环中的

我有字符串“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循环中的第二个数字就是您想要的数字,请参见示例代码:

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 );