【问题标题】:My c++ program is compiling fine, but not running . My program is running and stopping for a while. No error is showing我的 c++ 程序编译正常,但没有运行 .我的程序正在运行并停止一段时间。没有显示错误
【发布时间】:2020-07-23 02:00:46
【问题描述】:

我的 c++ 程序正在编译,没有错误。我在 vscode 上运行我的程序。在同一个文件中,当我运行此代码时。
我的系统:

  1. Windows 10
  2. 视觉工作室代码
  3. c++ 14
#include<bits/stdc++.h>
using namespace std;
int main(){
count<<"Hello";
return 0;
}

运行良好。
当在同一个文件中时,我把这段代码,

#include<bits/stdc++.h>
using namespace std;
int removeAlt(string s);
int removeTwo(string s,char a,char b);
int alternate(string s);

int main(){
    cout<<alternate("abaacdabd");
    return 0;
}
int removeAlt(string s){
    // remove consicutive characters
    for(int i=0;i<s.size();){
        if(s[i]==s[i+1]){
            s.erase(i,1);
        }
    }
    cout<<"Remove consitutive "<<s<<endl;
    return s.size();
}

int removeTwo(string str,char a,char b){
    for(int i=0;i<str.length();){
        char ch=str[i];
        if(str[i]==a||str[i]==b){
            str.erase(i,1);
        } else i++;
    }
    cout<<"removing "<<a<<" "<<b<<",, "<<str<<endl;
    int res=removeAlt(str);
    return res;
}

// Complete the alternate function below.
int alternate(string s) {
    set<char>st;
    // get different character of set
    for(auto x:s)
        st.insert(x);

    int len=st.size(); // length of set
    char setAr[len];
    auto it=st.begin();
    for(int i=0;i<len;i++){
        setAr[i]=*it;
        it++;
    }
    cout<<"Removing\n";
    int up=len;
    for(int i=0;i<up-1;i++){
        for(int j=i+1;j<=up;j++){
            cout<<"SetAr "<<i<<" "<<j<<endl;
            len=max(0,removeTwo(s,setAr[i],setAr[j]));
        }
    }
    return len;
}

它运行一些语句,之后终端暂停永远

【问题讨论】:

  • 如果您使用调试器,您应该会在一两分钟内发现问题。我的建议是花一些时间学习如何使用调试器。

标签: c++ gcc c++14


【解决方案1】:
int removeAlt(string s){
    // remove consicutive characters
    for(int i=0;i<s.size();){
        if(s[i]==s[i+1]){
            s.erase(i,1);
        } else i++;
    }
    cout<<"Remove consitutive "<<s<<endl;
    return s.size();
}

如果下一个元素与当前元素不同,则增加 i。

【讨论】:

    【解决方案2】:
    int removeAlt(string s){
        // remove consicutive characters
        for(int i=0;i<s.size();){
            if(s[i]==s[i+1]){
                s.erase(i,1);
            }
        }
        cout<<"Remove consitutive "<<s<<endl;
        return s.size();
    }
    

    你永远不会增加 i,所以这个函数将永远运行,除非它删除所有内容。

    【讨论】:

      猜你喜欢
      • 2014-06-19
      • 2013-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-08
      • 2020-04-01
      相关资源
      最近更新 更多