我在使用Java进行编码时遇到了类似的问题,在那种情况下,我使用str1.split(“,”)将整数字符串更改为它们的数组。
C ++中是否有一个与Java的split方法具有相似功能的方法,或者是使用for循环实现相同目标的最佳方法?
答案 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;
}
您可以根据istream
或istream_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;
}