Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
dreamn
0 / 0 / 0
Регистрация: 25.09.2016
Сообщений: 27
#1

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

20.10.2016, 16:42. Просмотров 602. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Преобразование string* в string (C++):

запрошено преобразование от ‘const std::string*’ к нескалярному типу ‘std::string’ - C++
private: std::string firstName; }; std::string ClientData::getFirstName() const{ return firstName; } Дает в итоге...

Доступ к паре в map<string, vector<pair<string, string>>>Temp - C++
Подскажите пожалуйста как получить данные в векторе пар ? void showData(const map&lt;string, vector&lt;pair&lt;string, string&gt;&gt;&gt;Temp) { ...

Преобразование string в char* - C++
int fun(char*); int main() { int a; string strok; strok=&quot;abc&quot;; strok+=&quot;cde&quot;; ...

Преобразование шаблона к string - C++
Доброго времени суток. Возник такой вопрос. Пусть есть три переменные: int a = 1; std::string s = &quot;mama&quot;; myClass d(3.14); ...

Преобразование Double в string - C++
Допустим у меня есть число double n = 0.0000000000 мне нужно преобразовать его в строку string s = 0.0000000000. Как это сделать?

Преобразование string в int - C++
Помогите пожалуйста с преобразованием string к типу int, быть может не напрямую но хоть как нибудь, очень надо!!!

40
hoggy
6764 / 2949 / 507
Регистрация: 15.11.2014
Сообщений: 6,627
Завершенные тесты: 1
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
2414 / 2003 / 705
Регистрация: 29.01.2016
Сообщений: 6,552
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 / 49
Регистрация: 17.10.2016
Сообщений: 312
21.10.2016, 11:50 #19
Цитата Сообщение от dreamn Посмотреть сообщение
Необходимо динамический string : string *
перепутал с char* ?
0
Croessmah
Ушел
Эксперт CЭксперт С++
13565 / 7716 / 873
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
21.10.2016, 11:56 #20
Цитата Сообщение от dreamn Посмотреть сообщение
delete this;
по рукам еще не били?
0
hoggy
6764 / 2949 / 507
Регистрация: 15.11.2014
Сообщений: 6,627
Завершенные тесты: 1
21.10.2016, 12:00 #21
Цитата Сообщение от dreamn Посмотреть сообщение
Необходимо динамический string
std::string - замечательный,
самый динамический из всех динамических стрингов.
1
John999
223 / 106 / 49
Регистрация: 17.10.2016
Сообщений: 312
21.10.2016, 12:02 #22
hoggy, только он его не так использует
Цитата Сообщение от dreamn Посмотреть сообщение
string*
1
dreamn
0 / 0 / 0
Регистрация: 25.09.2016
Сообщений: 27
21.10.2016, 12:13  [ТС] #23
Цитата Сообщение от John999 Посмотреть сообщение
Необходимо динамический string : string *
перепутал с char* ?
Нет, не перепутал. Именно string
И именно динамический

Добавлено через 1 минуту
Цитата Сообщение от Croessmah Посмотреть сообщение
Цитата Сообщение от dreamn Посмотреть сообщение
delete this;
по рукам еще не били?
Так объяснял препод по программированию. Типа, если инициализация с ошибкой, то удаляем объект.

Добавлено через 23 секунды
Цитата Сообщение от John999 Посмотреть сообщение
hoggy, только он его не так использует
Цитата Сообщение от dreamn Посмотреть сообщение
string*
А как правильно?
0
nd2
2414 / 2003 / 705
Регистрация: 29.01.2016
Сообщений: 6,552
21.10.2016, 12:39 #24
Цитата Сообщение от dreamn Посмотреть сообщение
Скинул свой код.
По сути точно также описано все, но падает на строчке чтения
Падает, скорее всего, из-за того, что после инициализации у тебя GPS указывает не на ту память, которая выделялась в конструкторе. При инициализации, нужно не указатели присваивать (при этом адрес, выделенной в конструкторе памяти, теряется):
Цитата Сообщение от dreamn Посмотреть сообщение
C++
1
GPS = _GPS;
а содержимое по указателям.
Покажи, как инициализацию делаешь.
1
dreamn
0 / 0 / 0
Регистрация: 25.09.2016
Сообщений: 27
21.10.2016, 13:06  [ТС] #25
Цитата Сообщение от nd2 Посмотреть сообщение
Покажи, как инициализацию делаешь.
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;
    }
}
0
nd2
2414 / 2003 / 705
Регистрация: 29.01.2016
Сообщений: 6,552
21.10.2016, 13:24 #26
dreamn, думаешь я этого кода не видел? Как делаешь покажи, вызов покажи. Чтобы было видно: что, и как ты туда передаёшь.
1
dreamn
0 / 0 / 0
Регистрация: 25.09.2016
Сообщений: 27
21.10.2016, 13:32  [ТС] #27
Цитата Сообщение от nd2 Посмотреть сообщение
dreamn, думаешь я этого кода не видел? Как делаешь покажи, вызов покажи. Чтобы было видно: что, и как ты туда передаёшь.
это в main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
     float   _thickness,      //Толщина
            _width,          //Ширина
            _length,         //Длина
            _weight;         //Вес
    string  *_model = new string,   // Модель
            *_mark = new string,    // Марка
            *_GPS = new string;
    bool err;
 
*_model = "Crew";
    *_mark = "LOL";
    *_GPS = "Unknown";
phoneClass *phone = new phoneClass (_thickness, _width, _length, _weight, _model, _mark, _GPS, err);
    phone->actFlashligth();
    phone->actFlashligth();
    phone->actGPS();
0
nd2
2414 / 2003 / 705
Регистрация: 29.01.2016
Сообщений: 6,552
21.10.2016, 13:42 #28
Цитата Сообщение от nd2 Посмотреть сообщение
При инициализации, нужно не указатели присваивать (при этом адрес, выделенной в конструкторе памяти, теряется):
C++
1
GPS = _GPS;
а содержимое по указателям.
C++
1
2
3
*model = *_model;
*mark = *_mark;
*GPS = *_GPS;
Покажи как в main() указатели инициализируются (_GPS и пр.).
1
dreamn
0 / 0 / 0
Регистрация: 25.09.2016
Сообщений: 27
21.10.2016, 13:46  [ТС] #29
Цитата Сообщение от nd2 Посмотреть сообщение
Покажи как в main() указатели инициализируются.
C++
1
2
3
4
5
6
7
8
9
10
int main(int argc, char** argv) {
    
    float   _thickness,      //Толщина
            _width,          //Ширина
            _length,         //Длина
            _weight;         //Вес
    string  *_model = new string,   // Модель
            *_mark = new string,    // Марка
            *_GPS = new string;
    bool err;
0
nd2
2414 / 2003 / 705
Регистрация: 29.01.2016
Сообщений: 6,552
21.10.2016, 13:47 #30
Понятно. Совет прежний.
1
21.10.2016, 13:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.10.2016, 13:47
Привет! Вот еще темы с ответами:

Преобразование из string в double - C++
Вот простой пример демонстрирующий данную проблему: Так работает: #include &lt;iostream&gt; #include &lt;cstdlib&gt; int main() { ...

Преобразование string в int - C++
Всем привет, нужно преобразовать string в int #include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; #include &lt;stdio.h&gt;...

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

Преобразование string в char* - C++
функция c_str переделывает стринг строку в const char* , а мне надо чтобы было без const то есть существует ли функция которая переделает...


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

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

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