我想解析一个看起来像“1,4-6,8-10,12”的字符串,并将结果push_back为ints/char *的向量。在解析时,如果逻辑遇到4-6,那么它应该将矢量4,5和6推入。我试图用strtok来做到这一点,但它修改了输入字符串的唯一副本,所以我没有得到任何地方。我无法使用boost或else tokenizer会非常容易和有用。C++使用多个分隔符使用内置的c/C++解析字符串
0
A
回答
0
#include <stlport\sstream>
#include <stlport\vector>
using namespace std;
...
stringstream ss("1,4-6,8-10,12");
vector<int> v;
int x, x2;
char c;
while (ss >> x)
{
v.push_back(x);
if (!(ss >> c))
break; // end of input string
if (c == '-')
{
if (!(ss >> x2))
throw; // incorrect input string
for (int i = x+1; i <= x2; i++)
v.push_back(i);
if (!(ss >> c))
break; // end of input string
}
else if (c != ',')
throw; // incorrect input string
}
// check
int s = v.size();
// s = 8, v:{1,4,5,6,8,9,10,12}
+1
我在strtok上浪费了太多时间。谢谢。 – alphabit
0
std::stringstream ss("1,4-6,8-10,12");
std::vector<int> v;
int x;
while(ss >> x)
{
v.push_back(x);
char c;
ss >> c; //will just discard a non space char.
if(c != ',' || c != '-') ss.unget(); //... unless is just , or -
}
写这篇文章的时间:1分钟。 搜索适当算法函数的时间:至少5分钟。
决定自己什么更有成效。
相关问题
- 1. 用Java中的多个分隔符解析字符串
- 2. 使用C的字符串分隔符
- 3. 分隔字符串解析?
- 4. 解析分隔字符串
- 5. Java - 使用多个分隔符的字符串解析或split()错误
- 6. 在C中使用strtok使用多个分隔符的分割字符串
- 7. C - 取一个字符串,并使用连字符分隔符解析/标记为较小的字符串
- 8. Java - 解析多分隔/维字符串
- 9. 如何使用多个分隔符分隔字符串并保留分隔符?
- 10. 用C++中的分隔符解析字符串
- 11. 在Java中使用分隔符“\ t”解析Java字符串
- 12. 使用C#分割字符串分隔符多
- 13. 在一个字符串解析项目由多个分隔符
- 14. 解析与多个分隔符的字符串
- 15. 用分隔符分析字符串“;” (JAVA)
- 16. 分割使用多个分隔符在Java中的字符串
- 17. 用几个分隔符解析一个字符串
- 18. 解析制表符分隔字符串
- 19. 分割字符串使用多字符分隔符
- 20. C - 使用其他分隔符分隔字符串?
- 21. 使用分隔符c将字符串拆分为一个点#
- 22. 拆分在C++字符串使用2个分隔符“+”和“ - ”
- 23. PHP解析字符串具有多个分隔符
- 24. 在java中使用多个分隔符分割字符串
- 25. 使用多个分隔符在swift中分割字符串
- 26. 在Python中使用多个分隔符分割字符串
- 27. 使用多个分隔符分割字符串Java
- 28. 在Java中使用多个分隔符部分Tokenizing字符串
- 29. 如何使用多个分隔符分割字符串
- 30. 在C++中使用分隔符高效解析多个数字的函数
复印串入一个'矢量'(包括空字符),然后使用'strtok'。 –
Praetorian
你也可以使用'string :: find'和'string :: substr':find',',提取子字符串,检查substring是否包含' - ',如果是使用'string :: find'提取这两个数字, string :: substr'并处理该情况,否则插入该数字。 –
为此使用'sscanf()'。忘记'strtok()'。 –