Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
dreamn
0 / 0 / 0
Регистрация: 25.09.2016
Сообщений: 27
#1

Преобразование string* в string

20.10.2016, 16:42. Просмотров 697. Ответов 40
Метки нет (Все метки)

Здравствуйте, друзья.
У меня есть класс. В нем описано поле
C++
1
string *GPS;
В конструкторе выделяю память. Передаю именно *_GPS для использования метода инициализации.
C++
1
2
3
Class::Class (string *_GPS) {
GPS = new string;
}
Мне необходимо сначала считать строку GPS из файла. Но как без проблем ее считать не удалось найти, поэтому решил обходом сделать
C++
1
2
3
4
5
6
char *buf = new char [100];
fstream ip ("data/ip.txt", ios::in);
ip.getline(buf, 100);
ip.close();
string TEMP_GPS (buf, strlen(buf));
*GPS = TEMP_GPS;
И последняя строка у меня не работает. Код компилируется, но падает на этой строчке.

Подскажите, пожалуйста, как мне лучше считать в ДИНАМИЧЕСКУЮ string* строку объекта С ПРОБЕЛАМИ?
Может какой-нибудь другой способ есть, а он 100% есть?
Заранее спасибо)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.10.2016, 16:42
Ответы с готовыми решениями:

Запрошено преобразование от ‘const std::string*’ к нескалярному типу ‘std::string’
private: std::string firstName; }; std::string...

Доступ к паре в map<string, vector<pair<string, string>>>Temp
Подскажите пожалуйста как получить данные в векторе пар ? void...

Преобразование char* в string
Доброго времени суток. Если я динамически выделил память для массива типа char,...

Преобразование String в Byte C++
как преобразовать массив из string (или только string) в byte? допустим,...

Преобразование из wchar_t в string
Здравствуйте! Подскажите, пожалуйста, каким образом можно преобразовать объект...

40
GbaLog-
Любитель чаепитий
3161 / 1467 / 462
Регистрация: 24.08.2014
Сообщений: 5,191
Записей в блоге: 1
Завершенные тесты: 2
20.10.2016, 16:55 #2
Цитата Сообщение от dreamn Посмотреть сообщение
Подскажите, пожалуйста, как мне лучше считать в ДИНАМИЧЕСКУЮ string* строку объекта С ПРОБЕЛАМИ?
C++
1
2
3
4
5
6
7
8
9
10
11
12
/////////////////////////////////////////////////////////////////////
// 
/////////////////////////////////////////////////////////////////////
#include <iostream>
#include <string>
/////////////////////////////////////////////////////////////////////
int main()
{
    std::string* str = new std::string{};
    std::getline( std::cin, *str );
    std::cout << *str << std::endl;
}
1
dreamn
0 / 0 / 0
Регистрация: 25.09.2016
Сообщений: 27
20.10.2016, 17:02  [ТС] #3
Цитата Сообщение от dreamn Посмотреть сообщение
Мне необходимо сначала считать строку GPS из файла.
Соответственно, вопрос
Цитата Сообщение от dreamn Посмотреть сообщение
Подскажите, пожалуйста, как мне лучше считать в ДИНАМИЧЕСКУЮ string* строку объекта С ПРОБЕЛАМИ?
Также из файла
0
GbaLog-
Любитель чаепитий
3161 / 1467 / 462
Регистрация: 24.08.2014
Сообщений: 5,191
Записей в блоге: 1
Завершенные тесты: 2
20.10.2016, 17:03 #4
Цитата Сообщение от dreamn Посмотреть сообщение
Также из файла
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/////////////////////////////////////////////////////////////////////
// 
/////////////////////////////////////////////////////////////////////
#include <iostream>
#include <string>
#include <fstream>
/////////////////////////////////////////////////////////////////////
int main()
{
    std::string* str = new std::string{};
    std::ifstream f_in( "file.txt" );
    std::getline( f_in, *str );
    std::cout << *str << std::endl;
}

Не по теме:

Зачем только строку в динамической памяти создавать? :-|

1
dreamn
0 / 0 / 0
Регистрация: 25.09.2016
Сообщений: 27
20.10.2016, 17:11  [ТС] #5
Цитата Сообщение от GbaLog- Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/////////////////////////////////////////////////////////////////////
// 
/////////////////////////////////////////////////////////////////////
#include <iostream>
#include <string>
#include <fstream>
/////////////////////////////////////////////////////////////////////
int main()
{
 std::string* str = new std::string{};
 std::ifstream f_in( "file.txt" );
 std::getline( f_in, *str );
 std::cout << *str << std::endl;
}
Падает
0
nmcf
6260 / 5572 / 2532
Регистрация: 14.04.2014
Сообщений: 23,464
20.10.2016, 17:15 #6
Память ещё и освободить нужно.
1
dreamn
0 / 0 / 0
Регистрация: 25.09.2016
Сообщений: 27
20.10.2016, 17:19  [ТС] #7
Цитата Сообщение от nmcf Посмотреть сообщение
Память ещё и освободить нужно.
Это не относится к падению, т.к. именно на этой строке падает
0
nmcf
6260 / 5572 / 2532
Регистрация: 14.04.2014
Сообщений: 23,464
20.10.2016, 17:23 #8
На какой?
1
GbaLog-
Любитель чаепитий
3161 / 1467 / 462
Регистрация: 24.08.2014
Сообщений: 5,191
Записей в блоге: 1
Завершенные тесты: 2
20.10.2016, 17:24 #9
Цитата Сообщение от dreamn Посмотреть сообщение
Падает
Не знаю, что у Вас там падает, у меня всё нормально:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/////////////////////////////////////////////////////////////////////
// 
/////////////////////////////////////////////////////////////////////
#include <iostream>
#include <string>
#include <fstream>
/////////////////////////////////////////////////////////////////////
int main()
{
    std::string* str = new std::string{};
    std::ifstream f_in( "file.txt" );
    while( f_in )
    {
        std::getline( f_in, *str );
        std::cout << *str << std::endl;
    }
}
file.txt
Код
qweq
qwe

wqjelq
sadqwlkasd
result
Код
g++ -Wall -std=c++14 new1.cpp -o new1.exe
g++ -Wall -std=c++14 new1.cpp -o new1.exe
Process started >>>
<<< Process finished. (Exit code 0)
================ READY ================
new1.exe
new1.exe
Process started >>>
qweq
qwe

wqjelq
sadqwlkasd
sadqwlkasd
<<< Process finished. (Exit code 0)
1
gru74ik
Модератор
Эксперт CЭксперт С++
4684 / 1998 / 303
Регистрация: 20.02.2013
Сообщений: 5,300
Записей в блоге: 24
20.10.2016, 17:25 #10
dreamn, чего пишет-то? Скрин ошибки в студию. Поди C++14 не подключил, а туда же - "падает".
1
nmcf
6260 / 5572 / 2532
Регистрация: 14.04.2014
Сообщений: 23,464
20.10.2016, 17:27 #11
Убери эти скобки
C++
1
std::string* str = new std::string;
1
GbaLog-
Любитель чаепитий
3161 / 1467 / 462
Регистрация: 24.08.2014
Сообщений: 5,191
Записей в блоге: 1
Завершенные тесты: 2
20.10.2016, 17:29 #12
Хотя нет, два раза последнюю строку выводит, ну тут дело в while цикле, я думаю.
1
dreamn
0 / 0 / 0
Регистрация: 25.09.2016
Сообщений: 27
20.10.2016, 17:52  [ТС] #13
Сейчас скрины загружу

Добавлено через 19 минут
Не могу скриншот отправить, напишу текстом.
Когда запускаю код, программа работает ровно до момента считывания (ставил cout'ы), никакого сообщения текстового об ошибки нет за исключением сообщения среды
C++
1
ВЫПОЛНЕНИЕ FAILED (значение выхода 139,, общее время: 2s)
Напомню, что это я описываю метод в классе, и записать необходимо в динамическое поле объекта типа string*
0
GbaLog-
Любитель чаепитий
3161 / 1467 / 462
Регистрация: 24.08.2014
Сообщений: 5,191
Записей в блоге: 1
Завершенные тесты: 2
20.10.2016, 18:24 #14
Цитата Сообщение от dreamn Посмотреть сообщение
Напомню, что это я описываю метод в классе, и записать необходимо в динамическое поле объекта типа string*
Может класс покажите?
0
nd2
2828 / 2398 / 1054
Регистрация: 29.01.2016
Сообщений: 8,022
20.10.2016, 19:53 #15
Цитата Сообщение от GbaLog- Посмотреть сообщение
Хотя нет, два раза последнюю строку выводит, ну тут дело в while цикле, я думаю.
C++
1
2
3
4
    while( std::getline( f_in, *str ) )
    {
         std::cout << *str << std::endl;
    }
0
hoggy
Заблокирован
20.10.2016, 19:56 #16
Цитата Сообщение от dreamn Посмотреть сообщение
необходимо сначала считать строку GPS из файла. Но как без проблем ее считать

C++
1
2
3
std::string line;
fstream ip ("data/ip.txt", ios::in);
io >> line;
0
nd2
2828 / 2398 / 1054
Регистрация: 29.01.2016
Сообщений: 8,022
20.10.2016, 20:20 #17
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
30
31
32
33
34
35
class Class
{
    string* GPS;
public:
    Class()
    { GPS = new string; }
    
    ~Class()
    { delete GPS; }
    
    void read()
    {
        ifstream fin ("file.txt");
        if (fin)
        {
            getline(fin, *GPS);
            fin.close();
        }
    }
    
    const string* get() const
    { return GPS;}
 
};
 
int main()
{
    
    Class obj;
    obj.read();
    cout << *(obj.get()) << endl;
 
    system("pause");
    return 0;
}
0
Миниатюры
Преобразование string* в string  
dreamn
0 / 0 / 0
Регистрация: 25.09.2016
Сообщений: 27
21.10.2016, 11:44  [ТС] #18
Класс
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
30
31
32
33
34
35
36
37
38
class phoneClass {
private:
    float   *thickness,      //Толщина
            *width,          //Ширина
            *length,         //Длина
            *weight;         //Вес
    string  *model,          //Модель
            *mark;           //Марка
    string  *GPS;            //Местонахождение
    bool err;                //Индентификатор ошибки 
    bool Init (float, float, float, float, string*, string*, string*);
    
public:
    bool iF = false, iS = false, iB = false, iG = false, iCon = false, iCall = false, iSms = false;
    
    phoneClass();
    phoneClass(float, float, float, float, string*, string*, string*, bool&);
    void actScreenshot();        //Скриншот
    void actFlashligth();        //Фонарик
    void actBrowser();           //Браузкер
    void actGPS();               //GPS
    int actContacts();          //Контакты
    int actCall();              //Звонок
    int actSms();               //Смс
    virtual ~phoneClass();
    void setMark(string* mark);
    string* getMark() const;
    void setModel(string* model);
    string* getModel() const;
    void setWeight(float* weight);
    float* getWeight() const;
    void setLength(float* length);
    float* getLength() const;
    void setWidth(float* width);
    float* getWidth() const;
    void setThickness(float* thickness);
    float* getThickness() const;
};
Конструктор
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
phoneClass::phoneClass(float _thickness, float _width, float _length, float _weight, string* _model, string* _mark, string* _GPS, bool &err) {
    cout << "phoneClass::phoneClass(float _thickness, float _width, float _length, float _weight, string* _model, string* _mark, bool &err)" << endl;
 
    thickness = new float;
    width = new float;
    length = new float;
    weight = new float;
    model = new string;
    mark = new string;
    GPS = new string;
 
    if (!Init(_thickness, _width, _length, _weight, _model, _mark, _GPS)) {
        cout << "Error in phoneClass::phoneClass(float* _thickness, float* _width, float* _length, float* _weight, string* _model, string* _mark)" << endl;
        delete this;
        err = false;
    }
    else err = true;
}
Инициализация
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
bool phoneClass::Init(float _thickness, float _width, float _length, float _weight, string* _model, string* _mark, string* _GPS) {
    cout << "bool phoneClass::Init(float* _thickness, float* _width, float* _length, float* _weight, string* _model, string* _mark)" << endl;
    if ((_thickness>0)&&(_width>0)&&(_length>0)&&(_weight>0)&&(!_model->empty())&&(!_mark->empty())) {
        *thickness = _thickness;
        *width = _width;
        *length = _length;
        *weight = _weight;
        model = _model;
        mark = _mark;
        GPS = _GPS;
 
        return true;
    }
    else {
        cout << "Error bool phoneClass::Init(float* _thickness, float* _width, float* _length, float* _weight, string* _model, string* _mark)" << endl;
        return false;
    }
}
Метод actGPS
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
30
31
32
void phoneClass::actGPS() {
    cout << "void phoneClass::actGPS()" << endl;
    char *buf = new char [100];
    
    if (iG == false) {
        cout << "iG = FALSE" << endl;
        ifstream f_in( "data/ip.txt" );
        cout << "FILE OPENED" << endl;
        getline( f_in, *GPS );
        cout << "READ STR" << endl;
        /*fstream ip ("data/ip.txt", ios::in);
        
        ip.getline(buf, 100);
        
        cout << "BUF = " << buf << endl;
        ip.close();
        string TEMP_GPS (buf, strlen(buf));
        cout << "TEMP_GPS = " << TEMP_GPS << endl;
        *GPS = TEMP_GPS;
        cout << "GPS = " << *GPS << endl;
        cout << "FILE CLOSED" << endl;*/
        iG = true;
        cout << "iG = TRUE" << endl;
    }
    else {
        cout << "iG = TRUE" << endl;
        *GPS = "Unknown";
        cout << "GPS = UNKNOWN" << endl;
        iG = false;
        cout << "iG = FALSE" << endl;
    }
}
Добавлено через 1 минуту
Цитата Сообщение от nd2 Посмотреть сообщение
C++
Скинул свой код.
По сути точно также описано все, но падает на строчке чтения

Добавлено через 59 секунд
Цитата Сообщение от hoggy Посмотреть сообщение
C++
1
2
3
std::string line;
fstream ip ("data/ip.txt", ios::in);
io >> line;
Необходимо динамический string
0
John999
223 / 106 / 79
Регистрация: 17.10.2016
Сообщений: 312
21.10.2016, 11:50 #19
Цитата Сообщение от dreamn Посмотреть сообщение
Необходимо динамический string : string *
перепутал с char* ?
0
Croessmah
++Ͻ
14374 / 8156 / 1534
Регистрация: 27.09.2012
Сообщений: 20,095
Записей в блоге: 3
Завершенные тесты: 1
21.10.2016, 11:56 #20
Цитата Сообщение от dreamn Посмотреть сообщение
delete this;
по рукам еще не били?
0
21.10.2016, 11:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.10.2016, 11:56

Преобразование string в int
Помогите пожалуйста с преобразованием string к типу int, быть может не напрямую...

Преобразование string to char
В общем никак не получается перегнать из строки в чар. Что надо: Имеется...

Преобразование map в string
Доброго времени суток. Есть программа для подсчета количества слов в тексте ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru