Я думаю, что есть какая-то банальная очень глупая ошибка, но я не могу ее исправить. Любой совет?
string stuff = "5x^9";
istringstream sss(stuff);
double coeff;
char x, sym;
int degree;
sss >> coeff >> x >> sym >> degree;
cout << "the coeff " << coeff << endl;
cout << "the x " << x << endl;
cout << "the ^ thingy " << sym << endl;
cout << "the exponent " << degree << endl;
Выход:
the coeff 0
the x
the ^ thingy
the exponent 1497139744
И так должно быть, я полагаю
the coeff 5
the x x
the ^ thingy ^
the exponent 9
@Bob__ уверен на 100%, я ввел точно "5x ^ 9", без пробелов вообще
@Bob__, но я вижу, что это работает на вас! Так что не так ??
Кажется, это связано: stackoverflow.com/questions/19725070/…. Здесь Я мог воспроизвести вашу проблему, в то время как здесь, заменив x
на z
, можно было проанализировать.
Кажется, ваша проблема связана с наличием символа x
после числа, которое вы хотите извлечь из своей строки ("5x"
), что вызывает проблемы с синтаксическим анализом в некоторых реализациях библиотеки.
См., Например, Несоответствие между оператором istream >> (double & val) между libC++ и libstdC++ или Символы извлечены istream >> double для более подробной информации.
Вы можете избежать этого, изменив имя неизвестного (например, x
-> z
) или используя другой метод извлечения, например, такой:
#include <iostream>
#include <string>
#include <sstream>
#include <stdexcept>
int main(void)
{
std::string stuff{"5x^9"};
auto pos = std::string::npos;
try {
double coeff = std::stod(stuff, &pos);
if ( pos == 0 or pos + 1 > stuff.size() or stuff[pos] != 'x' or stuff[pos + 1] != '^' )
throw std::runtime_error("Invalid string");
int degree = std::stoi(stuff.substr(pos + 2), &pos);
if ( pos == 0 )
throw std::runtime_error("Invalid string");
std::cout << "coeff: " << coeff << " exponent: " << degree << '\n';
}
catch (std::exception const& e)
{
std::cerr << e.what() << '\n';
}
}
На самом деле, когда я явно объявил x = 'x', это сработало!
Невозможно воспроизвести ideone.com/CH8wLu. Как я спросил в вашем предыдущий вопрос, уверены ли вы, что исходная строка не содержит пробелов?