#c #string #stringstream
#c #строка #stringstream
Вопрос:
У меня есть проект, в котором входные данные представлены в определенном формате, и из него нужно извлечь данные.
Формат похож на H79.03 = J99.30
, и мне нужно получить числа с плавающей запятой.
Как лучше всего это сделать, используя только std::stringstream
and std::string
?
Комментарии:
1. Что вы пробовали до сих пор? Опубликуйте свой код.
Ответ №1:
Да, вы можете использовать только stringstream и string . Во-первых, замените недопустимые цифры пробелами. Затем возьмите числа.
string originalStr = "H79.03 = J99.30";
string expression = originalStr;
for(int i = 0; i < expression.length(); i ) {
if (!isdigit(expression[i]) amp;amp; (expression[i] != '.'))
expression[i] = ' ';
}
stringstream str(expression);
float firstValue, secondValue;
str >> firstValue;
str >> secondValue;
cout<<firstValue<<endl; // it prints 79.03
cout<<secondValue<<endl; // it prints 99.30
Комментарии:
1. Ваш цикл заменяет десятичные точки чисел с плавающей запятой. Не преобразуйте их в пробелы. И
firstValue
иsecondValue
должны быть объявлены какfloat
илиdouble
вместоint
2. Спасибо @RemyLebeau за ваши предложения.
3. вы все еще отбрасываете десятичные точки.
isdigit()
возвращает false для'.'
. Вам нужно использовать это вместо:if (!isdigit(expression[i]) amp;amp; (expression[i] != '.'))
Ответ №2:
std::string s = "H79.03 = J99.30";
std::istringstream iss(s);
double d1, d2;
if (iss.ignore() amp;amp;
iss >> d1 amp;amp;
iss.ignore(4) amp;amp;
iss >> d2)
{
// is d1 and d2 as needed...
}