我正在寻找一种方法将具有指定分隔符(例如斜杠或空格)的字符串转换为这些分隔符分隔的整数数组。
例如,如果用户输入12/3/875/256
,我需要检索数组{12, 3, 875, 256}
。理想情况下,它可以处理任意长度。
我尝试逐字逐句地扫描字符串,并将不是分隔符的所有内容存储在临时变量中,下次遇到分隔符时将其添加到数组中。不幸的是,类型转换是一个痛苦的屁股。有更简单的方法吗?
答案 0 :(得分:2)
您可以将'/'设置为分隔符并使用getline进行读取吗?然后你必须把每个变成一个变量,你需要知道大小 - 也许你可以通过数组并计算斜杠?那么你就知道了,并且可以先设置数组。您可能需要将每个字符串段解析为int,这可能是也可能不困难。 (暂时没有使用过c ++,我记不太方便了。)
请参阅here,了解如何完成此操作(3个帖子)。
答案 1 :(得分:1)
此Parsing String to Array of Integers
涵盖拆分在C ++中将字符串转换为int有很多相关的问题https://stackoverflow.com/search?q=convert+string+to+int+c%2B%2B
类型转换有什么问题?就我所见,它似乎并不是一个障碍。
你能展示你的代码吗?
答案 2 :(得分:1)
答案 3 :(得分:1)
看看this other answer。它甚至有一个使用boost :: tokenizer的tokenizer代码的例子。
编辑:
我在那里复制了代码并进行了必要的修改:
#include <iostream>
#include <string>
#include <boost/foreach.hpp>
#include <boost/tokenizer.hpp>
#include <vector>
#include <boost/lexical_cast.hpp>
#include <iterator>
#include <algorithm>
using namespace std;
using namespace boost;
int main(int argc, char** argv)
{
string text = "125/55/66";
vector<int> vi;
char_separator<char> sep("/");
tokenizer<char_separator<char> > tokens(text, sep);
BOOST_FOREACH(string t, tokens)
{
vi.push_back(lexical_cast<int>(t));
}
copy(vi.begin(), vi.end(), ostream_iterator<int>(cout, "\n"));
}
将打印:
125
55
66
答案 4 :(得分:0)
你可以使用Boost.split和Boost.lexical_cast的组合来分解你想要的任何分隔符的字符串,然后你可以将它全部用词汇表示。
#include <boost/foreach.hpp>
#include <boost/lexical_cast.hpp>
#include <boost/algorithm/string.hpp>
#include <iostream>
#include <vector>
#include <string>
int main()
{
std::string s = "11/23/2010";
std::vector<std::string> svec;
std::vector<int> ivec;
// split the string 's' on '/' delimiter, and the resulting tokens
// will be in svec.
boost::split(svec, s, boost::is_any_of("/"));
// Simple conversion - iterate through the token vector svec
// and attempt a lexical cast on each string to int
BOOST_FOREACH(std::string item, svec)
{
try
{
int i = boost::lexical_cast<int>(item);
ivec.push_back(i);
}
catch (boost::bad_lexical_cast &ex)
{
std::cout << ex.what();
}
}
return 0;
}
未经测试......此机器没有增强功能。
您可以使用其他方式将std::string
/ char *
转换为int
类型,直接使用stringstream
,或使用atoi
等C构造。