将字符串转换为int并使用stringstream获取C++中消耗的字符数

4 c++ stringstream

我是C++的新手(来自C#背景),我正在尝试学习如何将字符串转换为int.

我通过使用a stringstream并将其输出到a中来实现它double,如下所示:

const char* inputIndex = "5+2";
double number = 0;
stringstream ss(inputIndex);
ss >> number;
// number = 5
Run Code Online (Sandbox Code Playgroud)

这非常有效.时遇到的问题是,字符串我解析开始与一个数字,而是可以具有其他的,而不是数字(例如,"5 + 2","9-(3 + 2)",等等)之后的数字字符.在stringstream开头解析数字,当它遇到一个非数字,就像我需要它停止.

当我想知道用于解析数字的字符数时,就会出现问题.例如,如果我解析25+2,我想知道两个字符用于解析25,以便我可以提前字符串指针.

到目前为止,我通过清除stringstream,将解析后的数字输入其中并读取结果字符串的长度来实现它:

ss.str("");
ss << number;

inputIndex += ss.str().length();
Run Code Online (Sandbox Code Playgroud)

虽然这确实有效,但对我来说这似乎真的很糟糕(虽然这可能只是因为我来自C#之类的东西),而且我有一种感觉可能导致内存泄漏,因为它str()创建了一个字符串的副本.

有没有其他方法可以做到这一点,还是我应该坚持我拥有的东西?

谢谢.

Cha*_*via 6

您可以使用它std::stringstream::tellg()来查找输入流中的当前获取位置.在从流中提取之前,将此值存储在变量中.然后从流中提取再次获取位置.这两个值之间的差异是提取的字符数.

double x = 3435;
std::stringstream ss;
ss << x;

double y;
std::streampos pos = ss.tellg();
ss >> y;
std::cout << (ss.tellg() - pos) << " characters extracted" << std::endl;
Run Code Online (Sandbox Code Playgroud)