提问者:小点点

为什么我会得到链表的额外输出


问题是

有一个输入字符串集合和一个查询字符串集合。对于每个查询字符串,确定它在输入字符串列表中出现的次数。

字符串=[ab,ab,abc]查询=[ab,abc,bc]有ab的实例2,'abc'的实例1和'bc'的实例0。对于每个查询,添加一个元素。

#include <iostream>
#include <cstdio>
#include <string>
using namespace std;
struct node {
    int data;
    node *next;
}*first=NULL,*last= new node;
void create(int count) {
    node *temp;
    temp = new node;
    temp->data = count;
    temp->next = NULL;
    if(!first) first=last=temp;
    else {
        last->next = temp;
        last = temp;
    }
}
void display() {
    node *temp = first;
    while(temp) {
        cout<<temp->data<<endl;
        temp = temp->next;
    }
}
void matchStrings(string s[],string q[],int s_count,int q_count){
    int counter;
    // res = new int[q_count];
        for(int i=0;i<=q_count;i++){
            counter = 0;
            for(int j=0;j<s_count;j++){
                if( q[i] == s[j] ) counter++;
            }
            if(counter != 0) create(counter);
            else create(0);
        }
    // return res;
}
int main() {
     int string_count,query_count,*res;

     cin>>string_count;
     string strings[string_count];
     for(int i=0;i<string_count;i++) cin>>strings[i];

    cin>>query_count;
    string queries[query_count];
    for(int i=0;i<query_count;i++) cin>>queries[i];
    matchStrings(strings,queries,string_count,query_count);

    // res = matchStrings(strings,queries,string_count,query_count);
    matchStrings(strings,queries,string_count,query_count);
    

    // for(int i=0;i<query_count;i++) cout<<res[i]<<endl;

    display();


    return 0;
}

现在我尝试使用链表实现它,但不是以2,1,0的形式获得输出。我得到的输出是2,1,0,2,2,1,0,2。我不知道是如何为超过3个链接创建LL的。请帮帮忙。


共1个答案

匿名用户

在函数void matchStrings()中,您已经编写了

用于(int i=0;i<=q_count;i++){

相反,它应该是

用于(int i=0;i;i++)

由于额外的检查,发生的情况是随机生成的字符串与Strings[]进行检查,结果它们不正确地匹配。因此,这将导致create(0)执行一次额外的时间,从而创建一个带有数据0的额外节点,并将其打印出来。