转换一串整数的最有效方法是什么? (1,5,73,2)成整数数组?

时间:2016-09-09 01:31:58

标签: c++ arrays parsing

我在使用Java进行编码时遇到了类似的问题,在那种情况下,我使用str1.split(“,”)将整数字符串更改为它们的数组。

C ++中是否有一个与Java的split方法具有相似功能的方法,或者是使用for循环实现相同目标的最佳方法?

2 个答案:

答案 0 :(得分:1)

使用std::istringstream解析它肯定会更方便。

但问的问题是什么才是最“有效”的。而且,无论好坏,#include <iostream>的效率都不为人所知。

为了效率,一个简单的for循环很难被击败。

假设输入不包含任何空格,只包含逗号和数字:

std::vector<int> split(const std::string &s)
{
    std::vector<int> r;

    if (!s.empty())
    {
        int n=0;

        for (char c:s)
        {
            if (c == ',')
            {
                r.push_back(n);
                n=0;
            }
            else
                n=n*10 + (c-'0');
        }
        r.push_back(n);
   }
   return r;
}

您可以根据istreamistream_iterator方法再次对此进行基准测试。

答案 1 :(得分:0)

如果你已经知道字符串中元素的数量,最快的方法是使用c函数sscanf,这比istringstream(http://lewismanor.blogspot.fr/2013/07/stdstringstream-vs-scanf.html)快得多:

#include <cstdio>
#include <iostream>

using namespace std;

int main() {
    const char * the_string= "1,2,3,45";
    int numbers[4];
    sscanf(the_string, "%d,%d,%d,%d", numbers+0, numbers+1, numbers+2, numbers+3);

    // verification
    for(int i=0; i<4; i++)
        cout<<numbers[i]<<endl;
}