Моя программа на С ++ прекрасно компилируется, но не работает. Моя программа работает и останавливается на некоторое время. Ошибка не отображается - PullRequest
0 голосов
/ 10 апреля 2020

Моя программа на С ++ компилируется с без ошибок . Я запускаю свою программу на vscode . В том же файле, когда я запускаю этот код.
Моя система:

  1. Windows 10
  2. Visual Studio Code
  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;
}

Он запускает некоторые операторы, после этого терминал останавливается навсегда . vscode run time

Ответы [ 2 ]

1 голос
/ 22 апреля 2020
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, если следующий элемент не совпадает с текущим.

1 голос
/ 10 апреля 2020
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, и поэтому эта функция будет работать вечно, пока не удалит все.

...