Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么要印刷;“好的”;改变输出?_C++ - Fatal编程技术网

C++ 为什么要印刷;“好的”;改变输出?

C++ 为什么要印刷;“好的”;改变输出?,c++,C++,请看一下这个代码 #include<iostream> #include <string.h> using namespace std; int main() { char ami[100000], tumi[100000]; scanf("%s ", ami); scanf("%s ", tumi); //************ This is the Problem*********** cout << "OK" <

请看一下这个代码

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

int main()
{
    char ami[100000], tumi[100000];
    scanf("%s ", ami);
    scanf("%s ", tumi);
//************ This is the Problem***********
   cout << "OK" << endl;
//*******************************************
    int l1 = strlen(ami);
    int l2 = strlen(tumi);
    int fwd[l1+1];
    int rev[l1+1];
    int j = 0;
    for(int i = 0; i < l1;i++)
    {
        if(j < l2 && ami[i] == tumi[j])
        {
            j++;
            fwd[i]++;
        }
        if(i!=0)
        fwd[i] += fwd[i-1];
    }
    j = l2- 1;
    for(int i = l1-1; i>=0; i--)
    {
        if(j >= 0 && ami[i] == tumi[j] )
        {
            j--;
            rev[i]++;
        }
        if(i!= l1-1)
        rev[i]+=rev[i+1];
    }
    long long int Q, HUDAI;
    scanf("%lld %lld", &Q, &HUDAI);

    for(int i = 0; i < Q; i++)
    {
        long long int x, y;
        scanf("%lld %lld", &x, &y);
        if(fwd[x-1]+rev[y+1] >= l2) cout << "YES" << endl;
        else cout << "NO" << endl;
    }
    return 0;
}
在这段代码中,如果我多次(5-7次)运行同一代码,它将显示不同的输出。。 有时是“好的,是的,不是”有时是“好的,是的”。。
但如果我对“cout进行注释,则会出现一些越界错误。我删除了C字符串、C数组和非标准功能,添加了一些绑定检查,并移动了一个绑定检查。现在,您的代码输出了
NO
,我没有发现任何未定义的行为:

#include <array>
#include <iostream>
#include <vector>

int main() {
  std::string ami, tumi;
  std::cin >> ami >> tumi;
  //************ This is the Problem***********
  std::cout << "OK\n";
  //*******************************************
  const int l1 = ami.length();
  const int l2 = tumi.length();
  std::vector<int> fwd(l1 + 1);
  std::vector<int> rev(l1 + 1);
  for (int i = 0, j = 0; i < l1; ++i) {
    if (static_cast<std::size_t>(j) < tumi.length() &&
        ami.at(i) == tumi.at(j) && j < l2) {
      ++j;
      ++fwd[i];
    }
    if (i != 0) fwd.at(i) += fwd.at(i - 1);
  }
  for (int i = l1 - 1, j = l2 - 1; i >= 0; --i) {
    if (j >= 0 && ami.at(i) == tumi.at(j)) {
      --j;
      ++rev.at(i);
    }
    if (i != l1 - 1) rev.at(i) += rev.at(i + 1);
  }
  long long int Q, HUDAI;
  std::cin >> Q >> HUDAI;

  for (int i = 0; i < Q; ++i) {
    long long int x, y;
    std::cin >> x >> y;
    if (fwd.at(x - 1) + rev.at(y + 1) >= l2)
      std::cout << "YES\n";
    else
      std::cout << "NO\n";
  }
  return 0;
}
#包括
#包括
#包括
int main(){
std::字符串ami,tumi;
标准::cin>>ami>>图米;
//************这就是问题所在***********
标准::cout=0;--i){
如果(j>=0&&ami.at(i)==tumi.at(j)){
--j;
++第(i)款修订;
}
如果(i!=l1-1)在(i)+=rev.at(i+1);
}
龙龙国际Q,胡岱;
标准::cin>>Q>>胡岱;
对于(int i=0;i>x>>y;
如果(在(x-1)处的前向+在(y+1)处的后向>=l2)

std::cout存在一些越界错误。我删除了C字符串、C数组和非标准功能,添加了一些绑定检查并移动了一个绑定检查。现在您的代码输出
NO
,我没有发现任何未定义的行为:

#include <array>
#include <iostream>
#include <vector>

int main() {
  std::string ami, tumi;
  std::cin >> ami >> tumi;
  //************ This is the Problem***********
  std::cout << "OK\n";
  //*******************************************
  const int l1 = ami.length();
  const int l2 = tumi.length();
  std::vector<int> fwd(l1 + 1);
  std::vector<int> rev(l1 + 1);
  for (int i = 0, j = 0; i < l1; ++i) {
    if (static_cast<std::size_t>(j) < tumi.length() &&
        ami.at(i) == tumi.at(j) && j < l2) {
      ++j;
      ++fwd[i];
    }
    if (i != 0) fwd.at(i) += fwd.at(i - 1);
  }
  for (int i = l1 - 1, j = l2 - 1; i >= 0; --i) {
    if (j >= 0 && ami.at(i) == tumi.at(j)) {
      --j;
      ++rev.at(i);
    }
    if (i != l1 - 1) rev.at(i) += rev.at(i + 1);
  }
  long long int Q, HUDAI;
  std::cin >> Q >> HUDAI;

  for (int i = 0; i < Q; ++i) {
    long long int x, y;
    std::cin >> x >> y;
    if (fwd.at(x - 1) + rev.at(y + 1) >= l2)
      std::cout << "YES\n";
    else
      std::cout << "NO\n";
  }
  return 0;
}
#包括
#包括
#包括
int main(){
std::字符串ami,tumi;
标准::cin>>ami>>图米;
//************这就是问题所在***********
标准::cout=0;--i){
如果(j>=0&&ami.at(i)==tumi.at(j)){
--j;
++第(i)款修订;
}
如果(i!=l1-1)在(i)+=rev.at(i+1);
}
龙龙国际Q,胡岱;
标准::cin>>Q>>胡岱;
对于(int i=0;i>x>>y;
如果(在(x-1)处的前向+在(y+1)处的后向>=l2)

std::难道这意味着你的代码有未定义的行为吗?在某个地方你正在做一些非法的事情,很可能你正在超出数组的界限。使用你的调试器逐步检查代码并确保你所有的数组访问都是合法的。如果(ami[i]==tumi[j]&&j
。在编制索引之前进行检查。首先猜测
int-fwd[l1]
->
int-fwd[l1+1]
,您需要为NUL终端留出空间。完成此操作后(fwd[l1+1])仍然存在相同的问题。有更多越界访问,但您已将其隐藏。您使用
char-ami[100000]和tumi[100000]创建了两个数组;
。您没有初始化它们。您读取了8和2个字符。但是您访问了未初始化的元素
tumi[2]
:这意味着您的代码有未定义的行为。您在某个地方做了非法的事情,很可能是超出了数组的界限。请使用调试器逐步检查代码并确保所有数组访问都是合法的。如果(ami[i]==tumi[j]&&j
。在编制索引之前进行检查。首先猜测
int-fwd[l1]
->
int-fwd[l1+1]
,您需要为NUL终端留出空间。完成此操作后(fwd[l1+1])仍然存在相同的问题。有更多越界访问,但您已将其隐藏。您使用
char-ami[100000]和tumi[100000]创建了两个数组;
。您没有初始化它们。您读取了8和2个字符。但是您访问了未初始化的元素
tumi[2]