当前位置: 首页 > 知识库问答 >
问题:

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

百里杰
2023-03-14

问题是

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

字符串=[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个答案

羊舌和安
2023-03-14

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

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

相反,它应该是

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

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

 类似资料:
  • 这是我的父类,有两个名为的方法。带有参数的那个在子类中使用。 这是我的子类,在子类的方法中,我使用父类的方法: 当我尝试显示子类的对象时,我得到以下错误: 线程“main”java.lang.StackOverflowError中出现异常

  • 我想删除至少有一个“NaN”的所有行。数据框如下图所示,但实际的数据框大约有1000004行。 完整的CSV文件:文件 我写的代码如下: 我预计至少有300000行,但我只有大约200000行。当我签入实际的CSV文件时,第一个NaN至少在第380000行之前不会出现。那么,为什么删除多余的行?

  • 很抱歉,我对Java知之甚少。我得到了这个代码来接管。基本上,我在 当我运行代码时。 下面是解析XML的块 这是Improts,不确定是否需要这样做 这是XML文件

  • 这里是一个新的Python编码器,有相当多的C#经验。我试图用Python来完成这个练习: 国际象棋字典验证器在本章中,我们使用字典值{'1h':'bking','6c':'wqueen','2g':'bbishop','5h':'bqueen','3e':'wking'}来表示国际象棋棋盘。编写一个名为isValidChessBoard()的函数,它接受一个字典参数,并根据板是否有效返回True

  • 问题内容: path = “/Volumes/Users” >>> path.lstrip(‘/Volume’) ‘s/Users’ >>> path.lstrip(‘/Volumes’) ‘Users’ >>> 我期望的输出是 问题答案: 是基于字符的,它将删除该字符串中左端的所有字符。 要验证这一点,请尝试以下操作: 由于是字符串的一部分,因此将其删除。 您需要改用切片: 或者,在Python