簡體   English   中英

從字符串中提取整數

[英]Extract integer from a string

我有一個類似“ yx-name”的字符串,其中y和x是從0到100的數字。從此字符串中,將c提取為整數變量的最佳方法是什么?

您可以將字符串分割為. 並將其直接轉換為整數類型。 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;

}

它將輸出:3

似乎該線程有一個與您類似的問題,可能有幫助;)

使用C ++進行簡單的字符串解析

使用兩個調用來對unsigned long strtoul( const char *str, char **str_end, int base ) ,例如:

#include <cstdlib>
#include <iostream>

using namespace std;

int main(){

    char const * s = "1.99-name";
    char *endp;
    unsigned long l1 = strtoul(s,&endp,10);
    if (endp == s || *endp != '.') {
        cerr << "Bad parse" << endl;
        return EXIT_FAILURE;
    }
    s = endp + 1;
    unsigned long l2 = strtoul(s,&endp,10);
    if (endp == s || *endp != '-') {
        cerr << "Bad parse" << endl;
        return EXIT_FAILURE;
    }
    cout << "num 1 = " << l1 << "; num 2 = " << l2 << endl;
    return EXIT_FAILURE;
}

您可以使用boost :: lexical_cast來實現它,它利用像Billz的答案中那樣的流:偽代碼看起來像這樣(該示例中的索引可能是錯誤的):

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

可以通過lexical_cast引發的異常來處理解析錯誤。 為了更靈活/更強大的文本匹配,我建議使用boost :: regex

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM