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

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

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

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

20.10.2016, 16:42. Просмотров 530. Ответов 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% есть?
Заранее спасибо)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.10.2016, 16:42     Преобразование string* в string
Посмотрите здесь:

Преобразование из string в double - C++
Объясните пожалуйста в чем связь между преобразованием данный из string в double и библиотекой русского языка Вот так работает #include...

Преобразование String в float - C++
Добрый день уважаемые форумчане. Подскажите пожалуйста как преобразовать String в float. Заранее благодарен.

Преобразование int в string - C++
не могу не как реализовать преобразование int в string, подскажите как это сделать ? например число int q=123, мне надо его сделать так что...

Преобразование string в char* - C++
char* string_to_char(string str){ int size = str.size(); char *ch = new char; for(int i = 0; i < size; i++) { ch = str; ...

Преобразование string в int - C++
Добрый день. Есть переменная типа string, в которой записана цифра. Как мою строку перевести к int?

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
hoggy
6437 / 2655 / 460
Регистрация: 15.11.2014
Сообщений: 5,842
Завершенные тесты: 1
20.10.2016, 19:56     Преобразование string* в string #16
Цитата Сообщение от dreamn Посмотреть сообщение
необходимо сначала считать строку GPS из файла. Но как без проблем ее считать

C++
1
2
3
std::string line;
fstream ip ("data/ip.txt", ios::in);
io >> line;
nd2
2130 / 1702 / 601
Регистрация: 29.01.2016
Сообщений: 5,485
20.10.2016, 20:20     Преобразование string* в string #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;
}
Миниатюры
Преобразование string* в string  
dreamn
0 / 0 / 0
Регистрация: 25.09.2016
Сообщений: 27
21.10.2016, 11:44  [ТС]     Преобразование string* в string #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
John999
223 / 106 / 49
Регистрация: 17.10.2016
Сообщений: 312
21.10.2016, 11:50     Преобразование string* в string #19
Цитата Сообщение от dreamn Посмотреть сообщение
Необходимо динамический string : string *
перепутал с char* ?
Croessmah
Модератор
Эксперт CЭксперт С++
13056 / 7319 / 816
Регистрация: 27.09.2012
Сообщений: 18,055
Записей в блоге: 3
Завершенные тесты: 1
21.10.2016, 11:56     Преобразование string* в string #20
Цитата Сообщение от dreamn Посмотреть сообщение
delete this;
по рукам еще не били?
hoggy
6437 / 2655 / 460
Регистрация: 15.11.2014
Сообщений: 5,842
Завершенные тесты: 1
21.10.2016, 12:00     Преобразование string* в string #21
Цитата Сообщение от dreamn Посмотреть сообщение
Необходимо динамический string
std::string - замечательный,
самый динамический из всех динамических стрингов.
John999
223 / 106 / 49
Регистрация: 17.10.2016
Сообщений: 312
21.10.2016, 12:02     Преобразование string* в string #22
hoggy, только он его не так использует
Цитата Сообщение от dreamn Посмотреть сообщение
string*
dreamn
0 / 0 / 0
Регистрация: 25.09.2016
Сообщений: 27
21.10.2016, 12:13  [ТС]     Преобразование string* в string #23
Цитата Сообщение от John999 Посмотреть сообщение
Необходимо динамический string : string *
перепутал с char* ?
Нет, не перепутал. Именно string
И именно динамический

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

Добавлено через 23 секунды
Цитата Сообщение от John999 Посмотреть сообщение
hoggy, только он его не так использует
Цитата Сообщение от dreamn Посмотреть сообщение
string*
А как правильно?
nd2
2130 / 1702 / 601
Регистрация: 29.01.2016
Сообщений: 5,485
21.10.2016, 12:39     Преобразование string* в string #24
Цитата Сообщение от dreamn Посмотреть сообщение
Скинул свой код.
По сути точно также описано все, но падает на строчке чтения
Падает, скорее всего, из-за того, что после инициализации у тебя GPS указывает не на ту память, которая выделялась в конструкторе. При инициализации, нужно не указатели присваивать (при этом адрес, выделенной в конструкторе памяти, теряется):
Цитата Сообщение от dreamn Посмотреть сообщение
C++
1
GPS = _GPS;
а содержимое по указателям.
Покажи, как инициализацию делаешь.
dreamn
0 / 0 / 0
Регистрация: 25.09.2016
Сообщений: 27
21.10.2016, 13:06  [ТС]     Преобразование string* в string #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;
    }
}
nd2
2130 / 1702 / 601
Регистрация: 29.01.2016
Сообщений: 5,485
21.10.2016, 13:24     Преобразование string* в string #26
dreamn, думаешь я этого кода не видел? Как делаешь покажи, вызов покажи. Чтобы было видно: что, и как ты туда передаёшь.
dreamn
0 / 0 / 0
Регистрация: 25.09.2016
Сообщений: 27
21.10.2016, 13:32  [ТС]     Преобразование string* в string #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();
nd2
2130 / 1702 / 601
Регистрация: 29.01.2016
Сообщений: 5,485
21.10.2016, 13:42     Преобразование string* в string #28
Цитата Сообщение от nd2 Посмотреть сообщение
При инициализации, нужно не указатели присваивать (при этом адрес, выделенной в конструкторе памяти, теряется):
C++
1
GPS = _GPS;
а содержимое по указателям.
C++
1
2
3
*model = *_model;
*mark = *_mark;
*GPS = *_GPS;
Покажи как в main() указатели инициализируются (_GPS и пр.).
dreamn
0 / 0 / 0
Регистрация: 25.09.2016
Сообщений: 27
21.10.2016, 13:46  [ТС]     Преобразование string* в string #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;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.10.2016, 13:47     Преобразование string* в string
Еще ссылки по теме:

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

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

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

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

Преобразование string в int - C++
нужно текст (string) из textBox преобразовать в число (int)


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

Или воспользуйтесь поиском по форуму:
nd2
2130 / 1702 / 601
Регистрация: 29.01.2016
Сообщений: 5,485
21.10.2016, 13:47     Преобразование string* в string #30
Понятно. Совет прежний.
Yandex
Объявления
21.10.2016, 13:47     Преобразование string* в string
Ответ Создать тему
Опции темы

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