Форум программистов, компьютерный форум CyberForum.ru

Запись информации из вектора типа string в вектор типа double - C++

Восстановить пароль Регистрация
 
virtuos553
 Аватар для virtuos553
48 / 3 / 1
Регистрация: 18.12.2012
Сообщений: 247
Записей в блоге: 1
10.06.2014, 18:07     Запись информации из вектора типа string в вектор типа double #1
Как записать только числа , которые хранятся в векторе типа стринг, в вектор типа дабл, в векторе типа стринг есть как буквы так и числа , мне нужно как-то вытащить от туда только числа, не подскажите как это сделать?
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
uglyPinokkio
325 / 228 / 41
Регистрация: 30.05.2014
Сообщений: 682
10.06.2014, 18:35     Запись информации из вектора типа string в вектор типа double #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include<vector>
#include<string>
#include<iostream>
#include<sstream>
 
int main()
{
  std::vector<double> out;
  std::vector<std::string> in;
  in.push_back("10.2");
  in.push_back("foo");
  in.push_back("bar");
  in.push_back("11.2");
  in.push_back("12.2");
  in.push_back("end");
  for(unsigned pos=0;pos<in.size();pos++)
  {
    std::stringstream conv(in[pos]);
    double out_dbl = 0.0;
    conv>>out_dbl;
    if(conv)
      out.push_back(out_dbl);
  }
  for(unsigned pos=0;pos<out.size();pos++)
  {
    std::cout<<out[pos]<<std::endl;
  }
  return 0;
}
virtuos553
 Аватар для virtuos553
48 / 3 / 1
Регистрация: 18.12.2012
Сообщений: 247
Записей в блоге: 1
10.06.2014, 18:40  [ТС]     Запись информации из вектора типа string в вектор типа double #3
вот как раз наткнулся на stringstream, можно пожалуйста с комментами?

Добавлено через 2 минуты
Тут впринципе все понятно, кроме вот этой строки if(conv)

Добавлено через 26 секунд
Тут впринципе все понятно, кроме вот этой строки if(conv)
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
10.06.2014, 18:43     Запись информации из вектора типа string в вектор типа double #4
Я бы так переводил:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <string>
#include <algorithm>
 
int main()
{
   std::string str{"text172.3text4text5 text 67 text"};
   std::string number;
   std::copy_if(str.begin(), str.end(), std::back_inserter(number),
                [](char ch) { return ::isdigit(ch) || ch == '.';} );
   //std::cout << number;
   if (std::count(number.begin(), number.end(), '.') <= 1)
   {
      long double dvalue;
      try {
         dvalue = std::stold(number);
         std::cout << "\nSuccessfully. -> " << std::fixed << dvalue << "\n";
      }
      catch (std::invalid_argument& e) {std::cerr << "invalid_argument\n";}
      catch (std::out_of_range& e) {std::cerr << "out_of_range\n";}
   }
   else
      std::cout << "\nUnsuccessfully\n";
 
   return 0;
}
uglyPinokkio
325 / 228 / 41
Регистрация: 30.05.2014
Сообщений: 682
10.06.2014, 18:52     Запись информации из вектора типа string в вектор типа double #5
Цитата Сообщение от virtuos553 Посмотреть сообщение
можно пожалуйста с комментами?
в цикле инициализируем его буфер содержим очередной строки и пытаемся получить оттуда дабл.
если преобразование успешно - добавляем в результирующий вектор.

Добавлено через 8 минут
Цитата Сообщение от virtuos553 Посмотреть сообщение
Тут впринципе все понятно, кроме вот этой строки if(conv)
А, сорри. У потока есть перегруженный оператор bool(), в котором проверяются несколько флагов состояния. Когда последняя операция завершилась успешно, он возвращает true.
virtuos553
 Аватар для virtuos553
48 / 3 / 1
Регистрация: 18.12.2012
Сообщений: 247
Записей в блоге: 1
10.06.2014, 19:27  [ТС]     Запись информации из вектора типа string в вектор типа double #6
А по какому критерию он переводит в дабл? просто вот в это строке, он нашел мне числа 1 17 1,хотя впринципе не должен был

"!120-180Hz_1.5V_ Analysis data universal file, Test.Lab project "GVT_W100AR12N" 01-06-2014 17:23:46 MODE NO. 1, FREQUENCY"
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.06.2014, 19:47     Запись информации из вектора типа string в вектор типа double
Еще ссылки по теме:

C++ Как разбить вектор на части(то есть вектора того же типа)
C++ Удаление [i][j] элемента из вектора типа string
C++ Сравнение переменной типа double c подстрокой из вектора

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
uglyPinokkio
325 / 228 / 41
Регистрация: 30.05.2014
Сообщений: 682
10.06.2014, 19:47     Запись информации из вектора типа string в вектор типа double #7
Видимо по тем же правилам, что и atof

http://www.cplusplus.com/reference/cstdlib/atof/
Yandex
Объявления
10.06.2014, 19:47     Запись информации из вектора типа string в вектор типа double
Ответ Создать тему
Опции темы

Текущее время: 15:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru