Разделение строки определенного формата на числа с плавающей запятой и строки

#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...
}
  

Живая демонстрация