我是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()创建了一个字符串的副本.
有没有其他方法可以做到这一点,还是我应该坚持我拥有的东西?
谢谢.
您可以使用它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)
| 归档时间: |
|
| 查看次数: |
949 次 |
| 最近记录: |