"iqueue->front"显示正确的值,而不是空值。但是tempiq显示NULL并给出分割错误。为什么?



代码中的while循环给出了分段错误(因为tempiq为NULL)。我无法弄清楚为什么当 iqueue->front 显示正确的值并且不为空时 tempiq 为 NULL(当然)。

        //......previous code
        tempiq=iqueue->front;
        cout<<"n"<<iqueue->front->link<<""<<iqueue->front;
        if(tempiq)// && iqueue->front)
        cout<<"n aaaaaaaaaaaaaaaaaaaat";
        while(tempiq)
        {
        //....rest of code

完整代码供参考如下:(以上代码段在最后的主函数中)

    #include <vector>
    #include <iostream>
    #include <string.h>
    #include <fstream>
    #include <stdio.h>
    #include <termios.h>
    #include <sstream>
    #include <unistd.h>
    #include <cstdlib>
    #include <ctype.h>
    using namespace std;
    #define NO_OF_CHARS 256
    /* This function builds the TF table which represents Finite Automata for a
       given pattern  */
    void computeTransFun(char *pat, int M, int TF[][NO_OF_CHARS])
    {
        int i, lps = 0, x;
        // Fill entries in first row
        for (x =0; x < NO_OF_CHARS; x++)
           TF[0][x] = 0;
        TF[0][pat[0]] = 1;
        // Fill entries in other rows
        for (i = 1; i<= M; i++)
        {
            // Copy values from row at index lps
            for (x = 0; x < NO_OF_CHARS; x++)
                TF[i][x] = TF[lps][x];
            // Update the entry corresponding to this character
            TF[i][pat[i]] = i + 1;
            // Update lps for next row to be filled
            if (i < M)
              lps = TF[lps][pat[i]];
        }
    }
    /* Prints all occurrences of pat in txt */
    int searchauto(char *pat, char *txt)
    {
        int M = strlen(pat);
        int N = strlen(txt);
        int TF[M+1][NO_OF_CHARS];
        computeTransFun(pat, M, TF);
     int flag=0;
        // process text over FA.
        int i, j=0;
        for (i = 0; i < N; i++)
        {
           j = TF[j][txt[i]];
           if (j == M)
           {
            return flag;
             //printf ("n pattern found at index %d", i-M+1);
           }
        }
        return flag;
    }
    class Node
    {
      char content;
      bool marker;
      vector <Node*>children;
      public:
      Node(){ content=''; marker=false; }
      ~Node(){}
      void setContent(char c){content=c;  }
      void setMarker(){this->marker=true; }
      char getContent(){return content; }
      bool getMarker(){return marker;  }
      Node *findChild(char c);
      void appendChild(Node *child)       
      { children.push_back(child);   }
      vector<Node *> getChildren()
      { return children;    }

    };
    class Trie
    {
        public:
        Node *root;
        int abc;
        void addWord(string s);
        void deleteWord(string s);
        bool searchWord(string s);
        Trie(){   root=new Node();  }
        ~Trie(){}

    };

    Node *Node::findChild(char c)
    {
        for(int i=0; i< children.size(); i++)
        {
          Node *temp=children.at(i);
          if(temp->content==c)
                return temp;
        }
        return NULL;
    }
    void Trie:: addWord(string s)
    {
        //cout<<"naddword called for "<<s<<"::::::::::::::::::::::::n";
        Node *current=root;
        if(s.length()==0)
        {   cout<<"txxxxt";  current->setMarker(); return ; }
        for(int i=0;i<s.length();i++)
        {
            Node *child=current->findChild(s[i]);
            if(child!=NULL)
                current=child;
            else
            {
                Node *tmp=new Node();
                tmp->setContent(s[i]);
                current->appendChild(tmp);
                current=tmp;
            }
            if(i==s.length()-1)
                current->setMarker();
            cout<<"ttryingt";
        }
        cout<<"n word addedt";
    }

    bool Trie::searchWord(string s)
    {
        cout<<"nsearchWord called for "<<s<<endl;
        Node *current=root;
        cout<<"n search startedt";
        cout<<endl;
        while(current !=NULL)
        {
            cout<<"t00t";
            for(int i=0;i<s.length();i++)
            {
                cout<<s[i]<<" ";
            Node *temp=current->findChild(s[i]);
            if(temp==NULL)
                return false;
                current=temp;
            }
            cout<<endl;
            int a;
           // cin>>a;
            if(current->getMarker())
            {
                cout<<"String found......................................................................................................n";
                return true;
            }
            else
            {
                cout<<"Sorry string not found in trie....................................................................................n";
                return false;
            }
        }
    }
    struct node
    {
        struct node *next;
        int rank;
        int nopage;
        Trie *trie;
        string value;
    };
    struct indexqueue
    {
        struct indexnode *front;
        struct indexnode *rear;
    };
    struct indexqueue *createindexqueue()
    {
        struct indexqueue *temp=new indexqueue;
        temp->front=NULL;
        temp->rear=NULL;
        //temp->count=0;
        return temp;
    }
    struct indexnode
    {
        int id;
        int rank;
        int *point2[];
        string link;
        Trie *down;
        struct indexnode *next;
    };
    struct indexnode *createindexnode(string val)
    {
        struct indexnode *temp=new indexnode;
        temp->next=NULL;
        //temp->value=val;
        //cout<<"Node created with val: "<<val<<endl;   
        return temp;
    }
    struct indexqueue *iqueue;
    struct queue
    {
        struct node *front;
        struct node *rear;
        int count;
    };
    struct node *createnode(string val)
    {
        struct node *temp=new node;
        temp->next=NULL;
        temp->value=val;
        //cout<<"Node created with val: "<<val<<endl;   
        return temp;
    }
    struct queue *createqueue()
    {
        struct queue *temp=new queue;
        temp->front=NULL;
        temp->rear=NULL;
        temp->count=0;
        return temp;
    }
    struct queue *pop(struct queue *queue1)
    {
        struct node *temp=new node;
        if(queue1->front==NULL)
            return NULL;
        else if(queue1->front==queue1->rear)
        {
            queue1->front=NULL;
            queue1->rear=NULL;
        }
        else
        {
            queue1->front=queue1->front->next;
        }
        return queue1;
    }
    struct queue *push(string val, struct queue *queue1)
    {
        struct node *new1=createnode(val);
        if(queue1->front==NULL && queue1->rear==NULL)
        {
            queue1->front=queue1->rear=new node;
            queue1->rear=new1;
            queue1->front=new1;
            //cout<<"1n";
        }
        else
        {
            queue1->rear->next=new node;
            queue1->rear->next=new1;
            queue1->rear=queue1->rear->next;
            //cout<<"2n";
        }
        queue1->count++;
        return queue1;
    }
    void inserttrie(struct queue *queue1,string value,string collection[],int n)
    {
        struct node *temp=queue1->front;
        while(temp!=NULL)
        {
            if(temp->value.compare(value)==0)
            {
                temp->nopage=n;
                for(int i=0;i<n;i++)
                temp->trie->addWord(collection[i]);
            }
        }
    }
    void display(struct queue *queue1)
    {
        if(!queue1->front)
        {
            cout<<"Queue emptyn";
            return;
        }
        struct node *temp=queue1->front;
        while(temp)
        {
            cout<<temp->value<<"n";
            temp=temp->next;
        }
    }
    void pushindex(struct indexnode *temp)
    {
        if(iqueue->front==NULL && iqueue->rear==NULL)
        {
            iqueue->front=temp;
            iqueue->rear=temp;
        }
        else 
        {
            iqueue->rear->next=temp;
            iqueue->rear=temp;
        }
    }
    int search(struct queue* queue1,string val)     //returns 1 if val found in queue1 else 0
    {
        if(queue1->front==NULL)
            return 0;
        struct node *temp=new node;
        temp=queue1->front;
        while(temp)
        {
            if(val.compare(temp->value)==0)
                return 1;
            temp=temp->next;
        }
        return 0;
    }
    int globalcounter=23456;
    struct queue *bot(struct queue *crawl,ifstream& infile,string text)
    {
        struct indexnode *newnode=new indexnode;
        //cout<<"n"<<text<<"toooooooooooon";
        newnode->link=text;
        newnode->down=new Trie;
        newnode->down->abc=globalcounter++;
        //cout<<"n"<<newnode->link<<"toooooooooooon";
        newnode->next=NULL;
        //indexnode->nop=0;
        //Trie *word=new Trie;
        if(infile==NULL)
            return NULL;
        cout<<"BOT_STARTn";
        string line;
        string tri[10000];
        //char *v;
        string v;
        string mxy;
        int n=0;
        while(getline(infile,line))
        {
            string link="";
            cout<<"n "<<line<<"tn";
            int i=0,flag=0,flag1=0,x=0,m=0;
            tri[x]="";
            for(i=0;i<line.length()-1;i++)
            {

                    if(line[i]==' '||line[i]=='*' && line[i+1]=='*'||line[i]=='*'||line[i]==';'||line[i]=='.'||line[i]=='/')
                    {
                        x++;
                        //tri[x-1][m]='';
                        //v+='';
                        //cout<<"n***********************************************************"<<v<<endl;
                        cout<<"n";
                        tri[x-1]=v;
                        newnode->down->addWord(v);
                        if(newnode->down->searchWord(v))
                            {
                                int a;
                                cout<<"HHHHHHHHHHHHHUUUUUUUUUUUUUUUUUUUUUURRRRRRRRRRRRRRRRRRRRRAAAAAAAAAAAAAYYYYYYYYYYYYYYn";
                                cout<<newnode->down->abc<<endl;
                                //cin>>a;
                            }
                        mxy=v;
                        v="";
                        m=0;
                        //tri[x]="";

                    }
                else
                    {
                        v+=line[i];
                        //tri[x][m]=line[i];
                        cout<<" "<<tri[x][m++]<<" "<<line[i]<<" "<<v;
                    }
                    //cout<<"t.....miiii...miiii....."<<tri[x]<<"      ";

                if(line[i]=='*' && line[i+1]=='*' && flag==0)
                {
                    flag=1;
                    i+=2;
                }
                if(line[i]=='*' && line[i+1]=='*' && flag==1)
                {
                    flag=0;
                    flag1=1;
                    i+=2;
                }
                if(flag==1 && flag1==0)
                {
                    link+=line[i];
                }
                if(flag1==1)
                {
                    link+='';
                    n++;
                    cout<<"nLink:"<<link<<endl;
                    if(search(crawl,link)==0)
                    {
                        cout<<"Link not found in queuen";
                        crawl=push(link,crawl);
                    }
                    else
                        cout<<"Link found in queuen";
                    link="";
                    flag1=0;
                }
                //
                //
                //
                //
            }
        }
        int xt;
        //newnode->down=word;
        if(!newnode->down)
        {
            int a;
            cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~n";
            //cin>>a;
        }
        //cout<<"````````````````````````` "<<newnode->down->abc;
        //int a;
        //cout<<newnode->down;
        //cin>>a;
        /*if(newnode->down->searchWord(" ")||newnode->down->searchWord("This")||newnode->down->searchWord(mxy))
        {
            int a;
            cout<<"DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDn";
            cin>>a;
            cin>>a;
        }*/
        //cout<<newnode->down->root->getMarker();
        //cin>>a;
        //cin>>xt;
        //displayIndexQueue();
        pushindex(newnode);
        infile.close();
        cout<<"BOT_ENDn";
        return crawl;
    }
    struct queue *merge(struct queue *queue1,struct queue *queue2)
    {
        if(queue1->front==NULL)
            return queue2;
        else if(queue2->front==NULL)
            return queue1;
        else
        {
            struct node *temp=queue2->front;
            while(temp)
            {
                if(search(queue1,temp->value)==0)
                    queue1=push(temp->value,queue1);
                temp=temp->next;
            }
            /*queue1->rear->next=queue2->front;
            queue1->rear=queue1->rear->next;*/
            return queue1;
        }
    }
    /*struct queue *checkduplicate(struct queue *queue1,struct queue *queue2)
    {
        if(queue1->front==NULL || queue2->front==NULL)
            return NULL;
        struct queue *tempqueue=createqueue();
        struct node *temp=queue1->front;
        while(temp)
        {
            if(search(queue2,temp->value)==0)
            {
                tempqueue=push(temp->value,tempqueue);
            }
            temp=temp->next;
        }
        return tempqueue;
    }*/
    struct queue *spider(struct queue *crawl,ifstream& infile,string text)
    {
        struct queue *queue1=createqueue();
        if(infile==NULL)
            return NULL;
        queue1=bot(queue1,infile,text);
        if(queue1->front==NULL)         //check whether there are no links in the queue1
            return crawl;
        cout<<"SPIDER:Linked list returned by bot:n";
        display(queue1);
        cout<<"n";
        cout<<"SPIDER:Displaying crawl before merge:nn";
        display(crawl);
        crawl=merge(crawl,queue1);
        //queue1=checkduplicate(queue1,crawl);
        cout<<"SPIDER:Displaying crawl after merge:nn";
        display(crawl);
        cout<<"n";
        struct node *temp=queue1->front;
        while(temp)
        {
            ifstream infile1;
            char *link=new char[((temp->value).length())+1];
            strcpy(link,(temp->value).c_str());
            infile1.open(link);
            cout<<"Spider is inside : "<<link<<endl;
            crawl=spider(crawl,infile1,string(link));
            temp=temp->next;
        }
        return crawl;
    }
    void displayIndexQueue()
    {
        if(iqueue->front==NULL)
        {
            cout<<"iqueue is empty----------------------------------------------n";
            return;
        }
        struct indexnode *temp=iqueue->front;
        while(temp)
        {
            cout<<temp->link<<endl;
            //cout<<"6666666666666666666666666666666666666666666666666666666666666666666666n";
            //if(temp->link=="/home/abhishek/Desktop/eco/testproject2_1_1.txt")
            //{
                if(temp->down->searchWord("this"))
                {
                    cout<<"this FOUNDn000000000000000000000000000=====================================================================000000000";
                }
                if(temp->down->searchWord("This"))
                {
                    cout<<"This FOUNDn000000000000000000000000000=====================================================================000000000";
                }
                if(temp->down->searchWord("movie"))
                {
                    cout<<"MOVIE FOUNDn000000000000000000000000000=====================================================================000000000";
                }
                cout<<"INSIDE IF OF displayIndexQueuen";
            //cout<<endl<<temp->link<<" &&&&&&&&&&& ";
            temp=temp->next;
        }
    }
    struct user
    {
        string first_name;
        string last_name;
        int age;
        string email;
        string password;
    };
    struct user users[100];
    int globalcount;
    int validatename(string name)
    {
        int len=name.length(),flag=0,i=0;
        while(flag==0 && i<len)
        {
            if(!((name[i]>='a' && name[i]<='z') || (name[i]>='A' && name[i]<='Z')))
            {
                flag=1;
                break;
            }
            i++;
        }
        if(flag==0)
        {
            return 1;
        }
        else
        {
            return 0;
        }
    }
    int validateemail(string email)
    {
        if(!((email[0]>='a' && email[0]<='z') || (email[0]>='A' && email[0]<='Z')))
            return 0;
        int len=email.length();
        int a=0,b=0,c=0;
        for(int i=0;i<len;i++)
        {
            if(email[i]=='@')
                a=i;
            else if(email[i]=='.')
                b=i;
        }
        if(b<a+2)
            return 0;
        if(b==len-1 ||b==len-2)
            return 0;
        return 1;
    }
    int getch() {
        struct termios oldt, newt;
        int ch;
        tcgetattr(STDIN_FILENO, &oldt);
        newt = oldt;
        newt.c_lflag &= ~(ICANON | ECHO);
        tcsetattr(STDIN_FILENO, TCSANOW, &newt);
        ch = getchar();
        tcsetattr(STDIN_FILENO, TCSANOW, &oldt);
        fflush(stdin);
        return ch;
    }
    string inputpassword()
    {
        char password[100];
        for(int i=0;i<100;i++)
        {
            char ch;
            ch=getch();
            if(ch=='n')
                break;
            password[i]=ch;
            cout<<"*";
        }
        return (string)password;
    }
    int validatepassword(string password)
    {
        int a=0,b=0,c=0,d=0;
        int len=password.length();
        if(len<6)
            return 0;
        for(int i=0;i<len;i++)
        {
            if(password[i]>='A' && password[i]<='Z')
                a++;
            else if(password[i]>='a' && password[i]<='z')
                b++;
            else if(password[i]>='0' && password[i]<='9')
                c++;
            else 
                d++;
        }
        if(a==0 || b==0 || c==0 || d==0)
            return 0;
        return 1;
    }
    string encrypt(string input)
    {
        int len=input.length();
        for(int i=0;i<len;i++)
        {
            if(i%2==0)
                input[i]=input[i]+5;
            else
                input[i]=input[i]-5;
        }
        return input;
    }
    string decrypt(string line)
    {
        int templ=line.length();
        int count_spaces=0,odd=0;
        for(int i=0;i<templ;i++)
        {
            if(line[i]==' ')
            {
                odd=-1;
                count_spaces++;
            }
            if(count_spaces==2)
            {
                if(line[i]!=' ')
                {
                    line[i]=line[i];
                }
            }
            else
            {
                if(line[i]!=' ')
                {
                    if(odd%2==0)
                        line[i]=line[i]-5;
                    else
                        line[i]=line[i]+5;
                }
            }
            odd++;
        }
        return line;
    }
    int checkexisting(string email)
    {
        cout<<"checkexisting calledn";
        for(int i=0;i<=globalcount;i++)
        {
            if(users[i].email.compare(email)==0)
            {
                cout<<"checkexisting returning 1n";
                return 1;
            }
        }
        cout<<"checkexisting returning 0n";
        return 0;
    }
    struct user *sign_up()
    {
        string first_name1,last_name1,email1,password1,password2;
        int age1;
        char test;
        cout<<"nHere are a few syntax rules for signing up on Black Box:n";
        cout<<"1.Age must not be less than 12 years.n";
        cout<<"2.First name and Last name fields will accept only alphabets.n";
        cout<<"3.email address must be of the form 'user@example.com'.n";
        cout<<"4.Password must be at least 6 characters in length and must include at least one upper case";
        cout<<" alphabet,one lower case alphabet,one numeral and one special character.nnn";
        cout<<"First Name: ";
        getline(cin,first_name1);
        while(validatename(first_name1)==0)
        {
            cout<<"Invalid first name entered.n";
            cout<<"nFirst name can have only alphabets(no spaces,no special characters and no numerals.n";
            cout<<"Enter your first name again: ";
            getline(cin,first_name1);
        }
        cout<<"nLast Name: ";
        getline(cin,last_name1);
        while(validatename(last_name1)==0)
        {
            cout<<"Invalid last name entered.n";
            cout<<"nLast name can have only alphabets(no spaces,no special characters and no numerals.n";
            cout<<"Enter your last name again: ";
            getline(cin,last_name1);    
        }
        cout<<"nAge: ";
        cin>>age1;
        if(age1<12)
        {
            cout<<"Sorry, but according to our TERMS OF USE, no user of age less than 12 can be allowed ";
            cout<<"to create an account on Black Box.n";
            return NULL;
        }
        fflush(stdin);
        cin.ignore();
        cout<<"nEmail address : ";
        getline(cin,email1);
        while(validateemail(email1)==0 || checkexisting(email1)==1)
        {
            if(validateemail(email1)==0)
            {
                cout<<"nInvalid email entered.n";
                cout<<"Email address can only be of the form abc@xyz.pqr.n";
                cout<<"Enter the email address again: ";
            }
            if(checkexisting(email1)==1)
            {
                cout<<"nEmail id already registered.nChoose a new one.n";
            }
            cout<<"nEnter Email address again: ";
            getline(cin,email1);
        }
        cout<<"nChoose a password: ";
        password1=inputpassword();
        cout<<"nRetype Password: ";
        password2=inputpassword();
            while(validatepassword(password1)==0 || password1.compare(password2)!=0)
            {
                if(validatepassword(password1)==0)
                {
                    cout<<"Invalid password enterd.n";
                    cout<<"Password must be at least 6 characters in length and must include at least";
                    cout<<" one upper case alphabet,one lower case alphabet,one numeral and one special character.n";
                }
                if(password1.compare(password2)!=0)
                {
                    cout<<"nPasswords do not match.n";
                }
                cout<<"Enter the password again: ";
                password1=inputpassword();
                cout<<"nRetype Password: ";
                password2=inputpassword();
            }
        struct user *newuser=new user;
        newuser->first_name=first_name1;
        newuser->last_name=last_name1;
        newuser->age=age1;
        newuser->email=email1;
        newuser->password=password1;
        ofstream outfile("userfile.txt",ios::app);
        if(outfile)
        {
            outfile<<encrypt(newuser->first_name)<<" "<<encrypt(newuser->last_name)<<" "<<newuser->age<<" "<<encrypt(newuser->email)<<" "<<encrypt(newuser->password)<<endl;
        }
        outfile.close();
        return newuser;
    }
    struct user extract(string line)
    {
        int len=line.length();
        int spaces=0;
        string first="",last="",age="",email="",password="";
        for(int i=0;i<len;i++)
        {
            if(line[i]==' ')
                spaces++;
            else
            {
                if(spaces==0)
                    first+=line[i];
                else if(spaces==1)
                    last+=line[i];
                else if(spaces==2)
                    age+=line[i];
                else if(spaces==3)
                    email+=line[i];
                else
                    password+=line[i];
            }
        }
        struct user newuser;
        newuser.first_name=first;
        newuser.last_name=last;
        stringstream convert(age);
        newuser.age=0;
        convert>>newuser.age;
        newuser.email=email;
        newuser.password=password;
        return newuser;
    }
    int loadusers()
    {
        string line;
        ifstream infile;
        infile.open("userfile.txt");
        if(!infile)
            return 0;
        while(getline(infile,line))
        {
            globalcount++;
            line=decrypt(line);
            users[globalcount]=extract(line);
        }
    }
    int login()
    {
        string email,password;
        char choice='y';
        while(choice=='y'||choice=='Y')
        {
            cout<<"nEnter email address: ";
            cin>>email;
            cout<<"nEnter password: ";
            cin>>password;
            int flag1=0,cur=-1;
            for(int i=0;i<=globalcount;i++)
            {
                if(email.compare(users[i].email)==0 && password.compare(users[i].password)==0)
                {
                    cur=i;
                    flag1=1;
                    break;
                }
            }
            if(flag1==1)
            {
                cout<<"Welcome "<<users[cur].first_name<<endl;
                break;
            }
            else
            {
                cout<<"Wanna try again?(y/n): ";
                cin>>choice;
            }
        }
        if(choice=='y'|| choice=='Y')
            return 1;
        else
            return 0;
    }
    int account_info()
    {
        int choice=0,m=1;
        cout<<"1.Sign upn2.Log inn3.Continue without an accountn4.Exit from Black Box.nEnter your choice: ";
        cin>>choice;
        fflush(stdin);
        cin.ignore();
        struct user *new_user=NULL;
            switch(choice)
            {
                case 1:
                    new_user=new user;
                    new_user=sign_up();
                    if(new_user==NULL)
                    {
                        cout<<"Sign up failed.";
                        choice=3;
                    }
                    else
                    {
                        cout<<"Successful Sign up.n";
                        ofstream outfile;
                        string newusernamefile="/home/aakash/project/users/"+encrypt(new_user->email)+".txt";
                        //char *newusernamefile1=newusernamefile.c_str();
                        outfile.open(newusernamefile.c_str());
                        outfile<<new_user->first_name;
                        outfile.close();
                        break;
                    }
                case 2:
                    if(login()==1)
                    {
                        cout<<"Successful login.n";
                        break;
                    }
                    else
                    {
                        cout<<"Login failed.n";
                        choice=3;
                    }
                case 3:
                    cout<<"Welcome to Black Box3.n";
                    break;
                case 4:
                    exit(0);
                    break;
                default:
                    cout<<"Wrong choice.n";
            };
            if(new_user)
            {
                cout<<"nThe details entered are:n";
                cout<<new_user->first_name<<endl;
                cout<<new_user->last_name<<endl;
                cout<<new_user->age<<endl;
                cout<<new_user->email<<endl;
                cout<<new_user->password;
            }
            cout<<endl<<endl;
        return 1;
    }
    void displayusers()
    {
        for(int i=0;i<=globalcount;i++)
        {
            cout<<"n"<<users[i].first_name<<" "<<users[i].last_name<<" "<<users[i].age<<" "<<users[i].email<<" "<<users[i].password;
        }
        cout<<endl;
    }
    int main()
    {
        globalcount=-1;
        int temp1=loadusers();
        if(globalcount!=-1)
            displayusers();
        int temp=account_info();
        int a;
        //cin>>a;
        struct queue *crawl=createqueue();
        iqueue=new indexqueue;
        iqueue->front=NULL;
        iqueue->rear=NULL;
        string text;
        text="inputproject.txt";
        ifstream infile;
        infile.open("inputproject.txt");
        if(!infile)
        {
            cout<<"inputproject.txt not openn";
            return 0;
        }
        else
            cout<<"inputproject.txt successfully openedn";
        crawl=spider(crawl,infile,text);
        cout<<"Heyn";
        if(crawl->front==NULL)
            return 1;
        cout<<"main:Displaying crawln";
        Trie *dummy=new Trie;
        dummy->addWord("movie");
        dummy->addWord("harry potter");
        dummy->addWord("rajnikanth");
        if(dummy->searchWord("movie"))
        {
            cout<<"MOVIE FOUND IN DUMMY^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^nnn";
        }
        if(dummy->searchWord("harry potter"))
        {
            cout<<"harry potter FOUND IN DUMMY^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^nnn";
        }
        if(dummy->searchWord("rajnikanth"))
        {
            cout<<"rajnikanth FOUND IN DUMMY^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^nnn";
        }
        cout<<iqueue->front->down;
        display(crawl);
        displayIndexQueue();
    string searchstring;
    cout<<"n Enter the string you want to entert";
    getline(cin,searchstring);
    string arraystring[20];int m=0,n=0;
    for(int i=0;i<20;i++)
        arraystring[i]="";
    for(int i=0;i<searchstring.length();i++)
    {
        cout<<"n segregating stringt";
        if(searchstring[i]==' ')
        {
            m=m+1;
            arraystring[m]="";
            cout<<"AAAAAAAAAAAn";
        }
        else
        {
            arraystring[m]+=searchstring[i];
            cout<<"BBBBBBBBBBBBn";
        }
        /*if((searchstring[i]>='a'&&searchstring[i]<='z')||(searchstring[i]>='A'&&searchstring[i]<='Z')||searchstring[i]=='/'||searchstring[i]=='_')
            {
                arraystring[m]+=searchstring[i] ;
                cout<<"n adding to arrayt";
            }
        else
        {
            m++;
            //n=0;
            cout<<"n incrementing 1t";
        }*/
    }
    //Searching for individual string to be as a part of links we crawled "State Automata Search"
    cout<<"n"<<iqueue->front->link<<"n-------------------t";
    indexqueue iqu[m];
    struct indexnode *tempiq;
    for(int x=0;x<m;x++)
    {
        cout<<"n 11111111111111t";
        //iqu[x]=new createindexqueue();
        //=createindexnode(" ");
        tempiq=iqueue->front;                      //above mentioned code segment
        cout<<"n"<<iqueue->front->link<<""<<iqueue->front<<"t________________________";
    if(tempiq)// && iqueue->front)
        cout<<"n aaaaaaaaaaaaaaaaaaaat";
        while(tempiq)
        {
            cout<<"n entered the tempiq inorder to searcht";
            indexnode *temp;
            temp=(iqu[x].front);
            char *c,*c2;
            strcpy(c,(tempiq->link).c_str());
            strcpy(c2,arraystring[x].c_str());
            if(searchauto(c2,c))
                {
                    cout<<"n checking for automatat";
                    while(temp)
                    {
                        cout<<"n entered whilet";
                        if(temp->next!=NULL)
                        temp=temp->next;
                        else
                            {
                                cout<<"n creaing indexest";
                                indexnode *am=createindexnode(tempiq->link);
                                temp->next=am;
                            }
                    }
                }

            tempiq=tempiq->next;
        }
    }
    for(int i=0;i<m;i++)
    {
        indexqueue q=iqu[i];
        indexnode *qt=q.front;
        while(qt)
        {
            cout<<"---"<<qt->link<<"---";
            qt=qt->next;
            cout<<"n";
        }
        cout<<"nnn";
    }
        //cout<<endl<<iqueue->front->down->abc<<endl;
        //cout<<iqueue->rear->down->abc;
        cout<<endl;
        return 1;
    }

我不确定是导致您的分段错误的问题,但是...这是一个问题。

使用以下说明

        char *c,*c2;
        strcpy(c,(tempiq->link).c_str());
        strcpy(c2,arraystring[x].c_str());
        if(searchauto(c2,c))

你用strcpy()写在几个未定义(cc2未初始化)和未分配的内存区域中。

您确定需要在char *指向区域中复制这几std::string吗?

在这种情况下,您应该分配所需的内存;像这样

        char *c,*c2;
        c  = new char[(tempiq->link).size()+1U];
        c2 = new char[arraystring[x].size()+1U];
        strcpy(c,(tempiq->link).c_str());
        strcpy(c2,arraystring[x].c_str());
        if(searchauto(c2,c))

但记得delete [] cc2.

如果您真的需要几个分配的char *,则这样做.

但我想你可以简单地将这几个std::stringc_str()值传递给searchauto()

       if(searchauto((tempiq->link).c_str(), arraystring[x].c_str()))

如果定义const参数searchauto()

int searchauto(const char *pat, const char *txt)

computeTransFun()的第一个

void computeTransFun(const char *pat, int M, int TF[][NO_OF_CHARS])

PS:对不起,我的英语不好。

相关内容

  • 没有找到相关文章

最新更新