Best way to get ints from a string with whitespace?

后端 未结 5 926
挽巷
挽巷 2020-12-08 22:30

I know this is simple, I just can\'t recall the best way to do this. I have an input like \" 5 15 \" that defines the x and y of a 2D vector array. I simply ne

相关标签:
5条回答
  • 2020-12-08 22:51

    I personally prefer the C way, which is to use sscanf():

    const char* str = " 5 15 ";
    int col, row;
    sscanf(str, "%d %d", &col, &row); // (should return 2, as two ints were read)
    
    0 讨论(0)
  • 2020-12-08 22:56

    Here's the stringstream way:

    int row, col;
    istringstream sstr(" 5 15 ");
    if (sstr >> row >> col)
       // use your valid input
    
    0 讨论(0)
  • You can do it using a stringstream:

    std::string s = " 5 15 ";
    std::stringstream ss(s);
    
    int row, column;
    ss >> row >> column;
    
    if (!ss)
    {
        // Do error handling because the extraction failed
    }
    
    0 讨论(0)
  • 2020-12-08 23:04

    Assuming you've already validated that the input is really in that format, then

    sscanf(str, "%d %d", &col, &row);
    
    0 讨论(0)
  • 2020-12-08 23:05

    The C++ String Toolkit Library (StrTk) has the following solution to your problem:

    int main()
    {
       std::string input("5 15");
       int col = 0;
       int row = 0;
       if (strtk::parse(input," ",col,row))
          std::cout << col << "," << row << std::endl;
       else
          std::cout << "parse error." << std::endl;
       return 0; 
    }
    

    More examples can be found Here

    Note: This method is roughly 2-4 times faster than the standard library routines and rougly 120+ times faster than STL based implementations (stringstream, Boost lexical_cast etc) for string to integer conversion - depending on compiler used of course.

    0 讨论(0)
提交回复
热议问题