2017-09-01 4 views
-2

はここで、このコードは、私が入った例{1,2,3}のセットのサブセットを見つけることができるようになると、それは私の教授がにある欲しいものC++サブセット配列ファインダは、カンマで終了しますか?

{} 
{1} 
{2} 
{12} 
{3} 
{13} 
{23} 
{123} 

を生成します私のコード

#include "iostream" 
using namespace std; 
void choice(); 
void Start(){ 
system("cls"); 
    char subset[100]; 
    int y,x; 
    cout << "Enter a Set"<<endl; 
    int pass = 0; 
    while (pass < 1){ 
     y = 0; 
     x = 0; 
     cin >> subset; 
      while(y < 100){ 
      if (subset[x+1] == '}') { cout<<"Invalid Set"<<endl<<"Enter a Set"<<endl; break; } 
      if (subset[x] == '}'&& subset[0] == '{') { cout << "Set Accepted"<<endl; pass = 1; break;} 
      x = x+2; 
      if (y == 99) {cout <<"Invalid Set"<<endl<<"Enter a Set"<<endl; } 
      y++; 
      } 
    }  
    int nofsubset = x/2; 
    int b = 1; 
    char arr[99]; 
    int n = nofsubset; 
     while(nofsubset!= 0) { 
      for(int l=0; l<n; l++){ 
      //cin >> arr[l]; 
      arr[l] = subset[b]; 
      b = b + 2; 
      } 
      for (int i=0; i<(1<<n); i++){ 
      cout << "{"; 
       for(int j=0; j<n; j++) {  
        if(i & (1 <<j)) { 
        cout << arr[j]; 
        }  
       } 
      cout <<"}"<<endl; 
      } 
      nofsubset = 0; 
     } 
    system("pause"); 
    choice(); 
} 

void choice(){ 
    system("cls"); 
    cout <<"**************************"<<endl; 
    cout <<"*      *"<<endl; 
    cout <<"* 1 - Generate Subsets *"<<endl; 
    cout <<"* 2 - Exit    *"<<endl; 
    cout <<"*      *"<<endl; 
    cout <<"**************************"<<endl; 
    int choice; 
    cin >> choice; 
    if(choice == 1){ Start();} 
    else{ return ;} 
} 

int main() { 
choice(); 
} 

ですアウトループアレイ上「」誰も私が私がちょうど置くように見えるカント私のコードを編集して助けてくださいすることができます。この

{} 
{1} 
{2} 
{1,2} 
{3} 
{1,3} 
{2,3} 
{1,2,3} 

のようにカンマでフォーマットにそれを置くため、ITLプロデュース{1,2,3、}

ありがとうございます!

+0

最初の出力の後に出力する前にカンマを印刷することを検討してください。 –

+1

*誰でも私のコードを編集するのを手伝ってください。* - 宿題の練習のポイントは、あなたがしたいことをするようにコードを構造化する方法を理解することです。これは単に「コードの編集」ではありません。 – PaulMcKenzie

+0

文字配列の代わりに 'std :: string'を使用することを推奨します。文字配列を使用する必要がある場合、 'cin >> subset'は入力された文字数を数えないので、より安全なメソッドを見つけることができます。 'std :: istream :: read'か' std :: getline'の派生を使ってみてください。 –

答えて

1
 cout << "{"; 
      bool first = true; 
      for(int j=0; j<n; j++) {  
       if(i & (1 <<j)) { 

       if (!first) cout << ","; // <<< try this 
       first = false; 

       cout << arr[j]; 
       }  
      } 
     cout <<"}"<<endl; 
+0

それは動作します!どうもありがとうございました – Ranz

関連する問題