Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

c++ элемент структуры типа string

73K
14 декабря 2011 года
Zzema
13 / / 10.11.2011
Есть элемент структуры типа string, как ему присвоить значение переменной типа string?

struct List {
string word;
int count;
List *next;
};
string i,s;
Когда пытаюсь сделать p1->word=i; - вылетает без объяснения причин (хотя s=i; - присваивает значение )
Даже просто p1->word = ""; не работает...

head=( List*)malloc(sizeof(List)); (может память неправильно выделяю под структуру?)
316
14 декабря 2011 года
Alm3n
889 / / 29.05.2009
14
14 декабря 2011 года
Phodopus
3.3K / / 19.06.2008
неправильно. malloc - это C. в C++ используется new
73K
14 декабря 2011 года
Zzema
13 / / 10.11.2011
Код:
#include <iostream>
using namespace std;


#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <string>
#include <fstream>
#include <conio.h>



struct List {
string word;
int count;
List *next;
};



/* структура данных, первое поле для хранения целого, второе поле-адрес в динамической памяти*/
List*head=NULL; /* начальный адрес*/


void Add(string i) /* функция, которая создает очередной элемент списка
i-element kotoryi dobavlyaem
j-kol-vo vhozhdeniy*/
{
    bool flag=false;
    if(head==NULL) {
        head=( List*)malloc(sizeof(List));
        head->word = i;
        head->count=1;
        head->next=NULL;
    }else {
        struct List *p,*p1;
        p=head;
        while((p->next!=NULL)){//proskakivaet, esli dva pervyh elementa odinakovie
            //if ((p->word)==2) {flag=true; break;}
            p=p->next;
        }
        if (!flag) {
            p1=new List;
            //p1->word=i;
            //for (int k = 0; k < (i.length()); k++)
            //  p1->word += (char)i[k];
            p1->count=1;
            p1->next=NULL;
            p->next=p1;
        } else p->count++;
    }
}

int s=0;



void Print(List*p)/* вывод списка на экран */
{
    printf(" %d",p->word);
if(p->next!=NULL)Print(p->next);
}



void delist()/* освобождение динамической памяти */
{
List*p;
while(head!=NULL) {
p=head;
head=head->next;
free(p);
}
}


int main()
{

          Add("fgh");
          Print(head);// вывод списка на экран
          printf("\n");

delist();
getch();

return 0;
}
316
14 декабря 2011 года
Alm3n
889 / / 29.05.2009
Цитата: Phodopus
неправильно. malloc - это C. в C++ используется new



Не вызвался конструктор для строки?
Почему код ниже работает нормально?

Код:
struct List {
 string word;
 int count;
 List *next;
 };



int main ()
{
    List* head;
    string i,s;

    head = (List*) malloc(sizeof(List));
    s= "str";
    head->word = s;
    cout << head->word;
    cin >> s;

return 0;

}
73K
14 декабря 2011 года
Zzema
13 / / 10.11.2011
Не работает... вылетает и все тут(
Код:
#include <iostream>
using namespace std;


#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <string>
#include <fstream>
#include <conio.h>

struct List {
 string word;
 int count;
 List *next;
 };



int main ()
{
    List* head;
    string i,s;

    head = (List*) malloc(sizeof(List));
    s= "str";
    head->word = s;
    cout << head->word;
    cin >> s;

return 0;
}
316
14 декабря 2011 года
Alm3n
889 / / 29.05.2009
Цитата: Zzema
Не работает... вылетает и все тут(
Код:
#include <iostream>
using namespace std;


#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <string>
#include <fstream>
#include <conio.h>

struct List {
 string word;
 int count;
 List *next;
 };



int main ()
{
    List* head;
    string i,s;

    head = (List*) malloc(sizeof(List));
    s= "str";
    head->word = s;
    cout << head->word;
    cin >> s;

return 0;
}



Это был вопрос немного не тебе. Надо убрать заглавную букву, наверное. Кстати, а у меня работает.

73K
14 декабря 2011 года
Zzema
13 / / 10.11.2011
Без заглавной буквы тоже не работает :(
Когда в список добавлял элементы типа int, то все работало без проблем, на string перейти не получается(((
316
14 декабря 2011 года
Alm3n
889 / / 29.05.2009
Цитата: Zzema
Без заглавной буквы тоже не работает :(


У меня из текста. :)
Допиши конструктор по умолчанию с инициализацией полей и вызов malloc на new поменяй.

73K
14 декабря 2011 года
Zzema
13 / / 10.11.2011
Можешь написать,чтобы например сокращенная программа, которую ты написал- работала?
20K
14 декабря 2011 года
sem2711
124 / / 23.09.2009
Функция malloc() не умеет корректно выделять память под объекты классов (коим является std::string). В этом ее основное отличие от оператора new. У меня в VS2010, кстати, "вываливается" программка с malloc(), а с new все отлично работает.
73K
14 декабря 2011 года
Zzema
13 / / 10.11.2011
и правда, с new list, работает маленькая программа, теперь попробую сделать, чтобы моя работала)))
20K
14 декабря 2011 года
sem2711
124 / / 23.09.2009
В целом, если нет каких-то специальных условий, если никто не пытает раскаленным утюгом и т.п., не стоит мешать в одну кучу C и C++. Это два совершенно разных языка, хоть и имеющих много общего.
73K
14 декабря 2011 года
Zzema
13 / / 10.11.2011
Да у нас в универе сначала си изучали, а потом плюсики добавились, а так как я ни тем ни другим долго не пользовался, различия между ними стерлись напрочь)))
73K
14 декабря 2011 года
Zzema
13 / / 10.11.2011
Может тогда заодно напомните, как вставка в бинарное дерево поиска происходит?)
20K
14 декабря 2011 года
sem2711
124 / / 23.09.2009
Вот ссылка по алгоритму
Вот по реализации
Вообще материала по данной теме в сети куча.
Не стесняйтесь пользоваться поиском!
240
15 декабря 2011 года
aks
2.5K / / 14.07.2006
Цитата: Zzema
Да у нас в универе сначала си изучали, а потом плюсики добавились, а так как я ни тем ни другим долго не пользовался, различия между ними стерлись напрочь)))


Запомните тогда хотя бы, что new/delete - помимо выделения памяти вызывают конструкторы/деструкторы. Кроме того это операторы, следовательно морут быть прегружены.
malloc/free такими свойствами не обладают.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог