C++ 从字符串中拆分 int

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/3421817/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-28 12:48:30  来源:igfitidea点击:

splitting int from a string

c++

提问by brett

I have string with number on ints seperated by space delimiter. Can some one help me how to split the string into ints. I tried to use find and then substr. Is there a better way to do it ?

我在整数上有由空格分隔符分隔的数字字符串。有人可以帮助我如何将字符串拆分为整数。我尝试使用 find 然后使用 substr。有没有更好的方法来做到这一点?

回答by

Use a stringsteam:

使用串串:

#include <string>
#include <sstream>

int main() {
    std::string s = "100 123 42";
    std::istringstream is( s );
    int n;
    while( is >> n ) {
         // do something with n
    }
}

回答by Kisalay

This has been discussed as part of Split a string in C++?

这已作为在 C++拆分字符串的一部分进行了讨论

Also, you can use boost library split function to achieve the splitting without a loop in your program. Eg.

此外,您可以使用boost库拆分功能来实现程序中没有循环的拆分。例如。

boost::split(epoch_vector, epoch_string, boost::is_any_of(","));

boost::split(epoch_vector, epoch_string, boost::is_any_of(","));

回答by Brian O'Kennedy

A version using boost. The stringstream version from Neil is so much simpler!

使用 boost 的版本。Neil 的 stringstream 版本要简单得多!

#include <iostream>
#include <vector>
#include <algorithm>
#include <boost/lexical_cast.hpp>
#include <boost/tokenizer.hpp>

int main()
{
  const std::string str( "20 30 40 50" );
  std::vector<int> numbers;
  boost::tokenizer<> tok(str);
  std::transform( tok.begin(), tok.end(), std::back_inserter(numbers), 
                  &boost::lexical_cast<int,std::string> );
  // print them
  std::copy( numbers.begin(), numbers.end(), std::ostream_iterator<int>(std::cout,"\n") ); 
}

回答by RiGonz

I had some trouble when reading and converting more than one string (I found I had to clear the string stream). Here a test I made with multiple int/string conversions with read/write to an i/o file.

我在读取和转换多个字符串时遇到了一些麻烦(我发现我必须清除字符串流)。这是我使用多个 int/string 转换进行的测试,读取/写入 i/o 文件。

#include <iostream>
#include <fstream> // for the file i/o
#include <string>  // for the string class work
#include <sstream> // for the string stream class work

using namespace std;

int main(int argc, char *argv[])
{
    // Aux variables:
    int aData[3];
    string sData;
    stringstream ss;

    // Creation of the i/o file:
    // ...
    // Check for file open correctly:
    // ...

    // Write initial data on file:
    for (unsigned i=0; i<6; ++i)
    {
        aData[0] = 1*i;
        aData[1] = 2*i;
        aData[2] = 3*i;

        ss.str(""); // Empty the string stream
        ss.clear();
        ss << aData[0] << ' ' << aData[1] << ' ' << aData[2];
        sData = ss.str(); // number-to-string conversion done

        my_file << sData << endl;
    }

    // Simultaneous read and write:
    for (unsigned i=0; i<6; ++i)
    {
        // Read string line from the file:
        my_file.seekg(0, ios::beg);
        getline (my_file, sData); // reads from start of file

        // Convert data:
        ss.str(""); // Empty the string stream
        ss.clear();
        ss << sData;
        for (unsigned j = 0; j<3; ++j)
            if (ss >> aData[j]) // string-to-num conversion done
                ;

        // Write data to file:
        my_file.seekp(0, ios::end);
        my_file << 100+aData[0] << ' '; // appends at the end of stream.
        my_file << 100+aData[1] << ' ';
        my_file << 100+aData[2] << endl;
    } 
    // R/W complete.

    // End work on file:
    my_file.close();

    cout << "Bye, world! \n";

    return 0;
}