【问题标题】:Program not working after the execution of the entire code执行整个代码后程序不工作
【发布时间】:2017-01-21 17:07:49
【问题描述】:

所以这段代码应该在单词开头的字符串的每个单词中计算出最后的“reverse_display”符号,如下所示: 辛>> 哦,叮叮当,叮叮当,一路叮当。哦,乘坐单马开放式雪橇是多么有趣。 3 cout

一切正常,除了执行结束后,程序停止工作,我看不到任何特殊原因。我尝试在程序末尾输入一个测试 cout,它执行,然后程序再次停止工作。我试过没有租房代码hereeturn 0,但徒劳无功。这是我存在的根源,请帮助。

 #include <iostream>
#include <string>
using namespace std;
int check_if_reverse_display_overload (int, int);
int main ()
{
    string dumi="";
    string duma="";

    getline (cin,dumi);

    dumi.append(" ");

    int reverse_display, reverse_display_overload, i=0, k=0;

    cin>>reverse_display;

    for (int i=0; i< dumi.length(); i++)
    {

        if ((dumi[i]>='A' && dumi[i]<='Z') || (dumi[i]>='a' && dumi[i]<='z') || dumi[i]=='-' || ( dumi[i]>='0' && dumi[i]<='9'))
        {

            duma[k]=dumi[i];
            k++;
        }
        else
        {
            if (((dumi[i-1]>='A' && dumi[i-1]<='Z') || (dumi[i-1]>='a' && dumi[i-1]<='z') || dumi[i-1]=='-' || (dumi[i-1]>='0' && dumi[i-1]<='9'))  && i!=1)
            {
            reverse_display_overload=check_if_reverse_display_overload(reverse_display, k);

            for (int j=k-reverse_display_overload; j<k; j++)
            {
                cout<<duma[j];
            }
            for (int j=0; j<k-reverse_display_overload; j++)
            {
                cout<<duma[j];
            }

            duma="";
            k=0;
            }
            cout<<dumi[i];

        }

    }
// cout<<"bogomil rainov e pi4";
    return 0;
}

int check_if_reverse_display_overload (int reverse_display, int k)
{
    if (k==0)
    {

        return reverse_display;
    }
    if(reverse_display>k)
    {

        return check_if_reverse_display_overload(reverse_display-k, k);
    }
    else
    {

        return reverse_display;
    }
}

【问题讨论】:

  • 您不能只访问一个空字符串 (duma)。您正在调用未定义的行为。
  • 您可以使用std::tolowerstd::toupper 消除一半的比较。

标签: c++ char symbols


【解决方案1】:

我的一个朋友帮我找到了错误。它与这段代码有关。它与在字符串 duma 的数组之外工作有关。虽然我还是无法理解这个bug的本质。

 if ((dumi[i]>='A' && dumi[i]<='Z') || (dumi[i]>='a' && dumi[i]<='z') || dumi[i]=='-' || ( dumi[i]>='0' && dumi[i]<='9'))
    {

        duma[k]=dumi[i]; // the error because of this line
        k++;
    }

【讨论】:

  • 此时duma 为空,因此duma[k] 超出任何k 的范围。您可以使用push_back 将字符添加到字符串中。
  • “虽然我仍然无法理解这个 bug 的本质。” 这很简单——你正在写入不存在的元素。
猜你喜欢
  • 2020-10-12
  • 2022-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多