只要把分配空间的malloc,改成new struct 就好
错误代码:
#include <iostream>
#include <string>
using namespace std;
typedef struct st{
string s;
int number;
struct st* next;
}node,*Pnode;
void Trans(string &c);
void InsertList(Pnode *List,string c);
void Display(Pnode List);
int main()
{
int num;
int ifin;
string c;
cin >> num;
Pnode List;
List = NULL;
while(num--)
{
cin >> c;
Trans(c);
InsertList(&List,c);
Display(List);
}
return 0;
}
void Trans(string &c)
{
for (string::iterator i=c.begin();i!=c.end();++i)
{
if ((*i)=='-')
{
i = c.erase(i);
continue;
}
if (isupper(*i))
{
(*i) = ((*i)-65)/3+49;
}
}
}
void InsertList(Pnode *List,string c)
{
Pnode p = (*List),q,pre;
if (p==NULL)
{
p = (Pnode)malloc(sizeof(node));
p->s = c;
p->number = 1;
p->next = NULL;
}
else{
while(p)
{
if (c.compare(p->s))
{
p->number++;
break;
}
pre = p;
p = p->next;
}
if (!p)
{
q = (Pnode)malloc(sizeof(node));
q->s = c;
q->number = 1;
q->next = NULL;
pre->next = q;
}
}
}
void Display(Pnode List)
{
int num = 0;
while(List)
{
if (List->number > 1)
{
num=0;
for (string::iterator i=List->s.begin();i!=List->s.end();++i)
{
if (num == 3)
cout << "-" << *i;
else cout << *i ;
num++;
}
cout << " " << List->number<< endl;
}
List = List->next;
}
}
正确代码:
#include <iostream>
#include <string>
using namespace std;
typedef struct st{
string s;
int number;
struct st* next;
}node,*Pnode;
void Trans(string &c);
void InsertList(Pnode *List,string c);
void Display(Pnode List);
int main()
{
int num;
int ifin;
string c;
cin >> num;
Pnode List;
List = NULL;
while(num--)
{
cin >> c;
Trans(c);
InsertList(&List,c);
Display(List);
}
return 0;
}
void Trans(string &c)
{
for (string::iterator i=c.begin();i!=c.end();++i)
{
if ((*i)=='-')
{
i = c.erase(i);
continue;
}
if (isupper(*i))
{
(*i) = ((*i)-65)/3+49;
}
}
}
void InsertList(Pnode *List,string c)
{
Pnode p = (*List),q,pre;
if (p==NULL)
{
p = new node;
p->s = c;
p->number = 1;
p->next = NULL;
}
else{
while(p)
{
if (c.compare(p->s))
{
p->number++;
break;
}
pre = p;
p = p->next;
}
if (!p)
{
q = new node;
q->s = c;
q->number = 1;
q->next = NULL;
pre->next = q;
}
}
}
void Display(Pnode List)
{
int num = 0;
while(List)
{
if (List->number > 1)
{
num=0;
for (string::iterator i=List->s.begin();i!=List->s.end();++i)
{
if (num == 3)
cout << "-" << *i;
else cout << *i ;
num++;
}
cout << " " << List->number<< endl;
}
List = List->next;
}
}