#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;
}
c++ элемент структуры типа string
struct List {
string word;
int count;
List *next;
};
string i,s;
Когда пытаюсь сделать p1->word=i; - вылетает без объяснения причин (хотя s=i; - присваивает значение )
Даже просто p1->word = ""; не работает...
head=( List*)malloc(sizeof(List)); (может память неправильно выделяю под структуру?)
неправильно. malloc - это C. в C++ используется new
Цитата: 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;
}
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;
}
Код:
#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;
}
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;
}
Цитата: 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;
}
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;
}
Это был вопрос немного не тебе. Надо убрать заглавную букву, наверное. Кстати, а у меня работает.
Когда в список добавлял элементы типа int, то все работало без проблем, на string перейти не получается(((
Цитата: Zzema
Без заглавной буквы тоже не работает :(
У меня из текста. :)
Допиши конструктор по умолчанию с инициализацией полей и вызов malloc на new поменяй.
Можешь написать,чтобы например сокращенная программа, которую ты написал- работала?
Функция malloc() не умеет корректно выделять память под объекты классов (коим является std::string). В этом ее основное отличие от оператора new. У меня в VS2010, кстати, "вываливается" программка с malloc(), а с new все отлично работает.
и правда, с new list, работает маленькая программа, теперь попробую сделать, чтобы моя работала)))
В целом, если нет каких-то специальных условий, если никто не пытает раскаленным утюгом и т.п., не стоит мешать в одну кучу C и C++. Это два совершенно разных языка, хоть и имеющих много общего.
Да у нас в универе сначала си изучали, а потом плюсики добавились, а так как я ни тем ни другим долго не пользовался, различия между ними стерлись напрочь)))
Может тогда заодно напомните, как вставка в бинарное дерево поиска происходит?)
Вот ссылка по алгоритму
Вот по реализации
Вообще материала по данной теме в сети куча.
Не стесняйтесь пользоваться поиском!
Вот по реализации
Вообще материала по данной теме в сети куча.
Не стесняйтесь пользоваться поиском!
Цитата: Zzema
Да у нас в универе сначала си изучали, а потом плюсики добавились, а так как я ни тем ни другим долго не пользовался, различия между ними стерлись напрочь)))
Запомните тогда хотя бы, что new/delete - помимо выделения памяти вызывают конструкторы/деструкторы. Кроме того это операторы, следовательно морут быть прегружены.
malloc/free такими свойствами не обладают.