【问题标题】:Why is my program getting terminated when i enter user input?为什么当我输入用户输入时我的程序会终止?
【发布时间】:2019-09-12 17:50:39
【问题描述】:

我正在练习一些来自黑客级别的问题,并陷入了这个称为稀疏数组的问题。 (https://www.hackerrank.com/challenges/sparse-arrays/problem) 我是初学者,我无法在我的代码中找出错误。请帮忙。谢谢

我认为我没有正确比较字符串。我尝试使用比较功能,但它仍然不起作用。

#include <iostream>
#include <string>
using namespace std;

int main(){
    int n;
    cin>>n;
    string strings[n];
    for(int i=0; i<n; i++){
        cin>>strings[i];
    }
    int m;
    cin>>m;
    string queries[m];
    for(int i=0; i<m; i++){
        cin>>queries[i];
    }

     //comparing
        for(int i=0; i<m; i++)
    {
        int count=0;
        for(int j=0; j<n; j++)
        {
            if(queries[i]==strings[j])
                    count++;
        }
        cout<<count<<endl;
    }
}

输出应该是(查询)中的字符串出现在(字符串)中但我的程序正在终止的次数,请帮忙。

【问题讨论】:

  • string strings[n]; 是高风险的。如此之高以至于它是not a part of Standard C++。给n 一个适当高的值,这将使您的程序超出自动存储​​空间,并可能导致堆栈溢出。
  • @NeilButterworth 请建议我从那时起我应该在哪里练习,我真的很困惑并且努力学习。
  • 建议:备份您的代码。然后一点一点地删除代码,直到你有一个可以编译的程序,当给定相同的输入时仍然会崩溃,并且什么都不做。通常减少坏代码周围的好代码的噪音可以更容易地发现和解决问题。
  • @YashAgrawal "请建议我从那时起应该在哪里练习"来自good C++ book
  • @user4581301 我应该如何输入然后先生请解释是否可能。

标签: c++ arrays string sparse-matrix


【解决方案1】:
for(int j=0; i<n; j++)

应该是

    for(int j=0; j<n; j++)

【讨论】:

  • 我真的很尴尬。这是一个愚蠢的错误,我在堆栈溢出时问这个进一步让我感到更加尴尬。非常感谢您的帮助先生。
  • 我心里有个问题。在 C++ 中使用向量而不是 VLA 是更好的做法吗?
  • 是的,当然。我没有解决 VLA,因为这不是您的问题,但仍然远离它们,并使用向量。
  • 因为 VLA 是在(有限的)堆栈内存上分配的,而向量使用堆存储,这通常更丰富。
  • @YashAgrawal 今天的典型桌面允许 1 MB 到 10 MB 用于自动存储(通常是堆栈)。动态存储(通常用堆实现)通常受计算机具有的可寻址内存量的限制,通常以千兆字节为单位。对可寻址一词的警告:如果您使用 32 位编译器,无论计算机有多少内存,可寻址存储通常为 2 或 4 GB(31 或 32 位)。
猜你喜欢
  • 2018-05-17
  • 1970-01-01
  • 2013-11-04
  • 2013-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-31
  • 2020-04-23
相关资源
最近更新 更多