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

Разделение строки на переменные разных типов - C++

Восстановить пароль Регистрация
 
iaa17
 Аватар для iaa17
2 / 2 / 1
Регистрация: 25.12.2011
Сообщений: 38
08.06.2012, 08:58     Разделение строки на переменные разных типов #1
Помогите с разделением строки
Есть String dat
dat = "40.10 50.10 60.10 70.10 11:15:23 4-03-2012"
необходимо разделить ее на 4 переменных типа double это первые 4 числа и 2 переменных типа string соответственно 2 последних слова.

Добавлено через 3 часа 9 минут
Код
C++
1
2
3
4
double td1, td2, td3, td4;
String ts1, ts2;
dat >> td1 >> td2 >> td3 >> td4;
dat >> ts1 >> ts2;
Компилируется, но при работе выдает ошибку о не соответствии типов
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.06.2012, 08:58     Разделение строки на переменные разных типов
Посмотрите здесь:

C++ Использование разных типов указателей
сложение разных типов C++
C++ Матрица из разных типов
C++ Объявить переменные разных типов в заголовке for
Хранение разных типов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Кот Ангенс
 Аватар для Кот Ангенс
317 / 267 / 37
Регистрация: 24.05.2012
Сообщений: 629
08.06.2012, 13:50     Разделение строки на переменные разных типов #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <sstream>
#include <string>
 
using namespace std;
 
int main() {
    const string dat = "40.10 50.10 60.10 70.10 11:15:23 4-03-2012";
    double td[4];
    string s1, s2;
    istringstream ss(dat);
    ss >> td[0] >> td[1] >> td[2] >> td[3] >> s1 >> s2;
}
iaa17
 Аватар для iaa17
2 / 2 / 1
Регистрация: 25.12.2011
Сообщений: 38
09.06.2012, 00:57  [ТС]     Разделение строки на переменные разных типов #3
Есть небольшая не стыковка переменная dat дожна быть именно типа String, а не const string.
И на istringstream ss(dat); выдается ошибка [C++ Error] E2285 Could not find a match for 'istringstream::basic_istringstream(AnsiString)'
Hrapvlesu
11 / 11 / 2
Регистрация: 08.06.2012
Сообщений: 28
09.06.2012, 02:02     Разделение строки на переменные разных типов #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    string dat = "40.10 50.10 60.10 70.10 11:15:23 4-03-2012";
    double d1, d2, d3, d4;
    string time, data;
    d1=stod(dat);
    dat.erase(0, dat.find(' ')+1);
    d2=stod(dat);
    dat.erase(0, dat.find(' ')+1);
    d3=stod(dat);
    dat.erase(0, dat.find(' ')+1);
    d4=stod(dat);
    dat.erase(0, dat.find(' ')+1);
    time=dat; 
    time.erase(time.find(' '));
    dat.erase(0, dat.find(' ')+1);
    data=dat;
После выполнения этого кода:
d1 = 40.1
d2 = 50.1
d3 = 60.1
d4 = 70.1
time= "11:15:23"
data= "4-03-2012"

Входная строка dat испорчена, если она еще нужна то предварительно скопируйте ее куда-нибудь.
iaa17
 Аватар для iaa17
2 / 2 / 1
Регистрация: 25.12.2011
Сообщений: 38
09.06.2012, 03:32  [ТС]     Разделение строки на переменные разных типов #5
Я еще раз повторюсь, что переменная dat имеет тип String, то есть по своей сути AnsiString, и если кто то мне скажет как перевести его в string, то я буду премного благодарен. Этот способ тоже не работает, из-за несоответствия типов.
Hrapvlesu
11 / 11 / 2
Регистрация: 08.06.2012
Сообщений: 28
09.06.2012, 03:41     Разделение строки на переменные разных типов #6
string=AnsiString не?
iaa17
 Аватар для iaa17
2 / 2 / 1
Регистрация: 25.12.2011
Сообщений: 38
09.06.2012, 03:55  [ТС]     Разделение строки на переменные разных типов #7
Вот теперь я понимаю, что я чего то конкретно не понимаю.
Начнем тогда сначала:
Значение в переменную dat записываются из БД следующим образом
String dat;
dat = ADOQuery->Fields->Fields[0]->AsString;
при том, что если исправить на string dat компилятор начнет ругаться.
соответственно в dat записывается "40.10 50.10 60.10 70.10 11:15:23 4-03-2012", это можно увидеть, если сразу просто вывести dat.
И вот эту строку мне и нужно разделить

Добавлено через 38 секунд
Цитата Сообщение от Hrapvlesu Посмотреть сообщение
string=AnsiString не?
Получается нет
Hrapvlesu
11 / 11 / 2
Регистрация: 08.06.2012
Сообщений: 28
09.06.2012, 04:11     Разделение строки на переменные разных типов #8
Тип AnsiString чисто примочка БорландБилдера, я его никогда не юзал поэтому тут вам не помощник. Гугл выдает много способов перевести ваш AnsiString в std::string. Я их проверить не могу за неимением билдера.

p.s. Да и проверьте, есть ли вообще у билдера функция stod (#include <string>). Она то относительно новая.
iaa17
 Аватар для iaa17
2 / 2 / 1
Регистрация: 25.12.2011
Сообщений: 38
09.06.2012, 04:26  [ТС]     Разделение строки на переменные разных типов #9
Ладно с преобразованием я справился
C++
1
2
std::string dat1;
AnsiString dat = dat1.c_str();
или
C++
1
2
AnsiString dat;
std::string dat1 = dat.c_str();
Остался вопрос какой библиотеке принадлежит функция stod
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.06.2012, 06:16     Разделение строки на переменные разных типов
Еще ссылки по теме:

C++ Сравнение переменных разных типов
C++ Простое создание строки из объектов разных типов данных
C++ Указатели разных типов

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

Или воспользуйтесь поиском по форуму:
Кот Ангенс
 Аватар для Кот Ангенс
317 / 267 / 37
Регистрация: 24.05.2012
Сообщений: 629
09.06.2012, 06:16     Разделение строки на переменные разных типов #10
После того, как получили std::string, можно и через строковые потоки.
Yandex
Объявления
09.06.2012, 06:16     Разделение строки на переменные разных типов
Ответ Создать тему
Опции темы

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