给结构体中string赋值时,程序被中断

来源:互联网 发布:淘宝网艾灸盒 编辑:程序博客网 时间:2024/05/22 07:58

只要把分配空间的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;    }}
0 0
原创粉丝点击