2017-02-20 10 views
0

私は1と0でいっぱいのchar配列を持っています。 1の後に0がある場合、それらは場所を切り替える必要があります。サイクルはk回繰り返されます。私はこのコードを書いたが、文字列を印刷しようとすると、何も印刷されないか、または単に印刷される。なぜこれが行われ、なぜ機能しないのか?文字配列内の文字の置換C++

#include <iostream> 
using namespace std; 
int const limit = 100000; 

int main() { 
    int k; 
    char s[limit]; 

    cin >> k; 
    cin >> s; 

    for (int i = 0; i < k; i++) { 
     for (int j = 0; j < strlen(s); j++) 
      if (s[j + 1] == '0' && s[j] == '1') { 
       s[j + 1] = '1'; 
       s[j] = 0; 
       } 
      } 
    } 

    cout << s; 

    return 0; 
} 
+3

'のS [j] = 0;'のS [j] = '0' でなければなりません。 '! –

+1

また、19行目の '}'のために、このコードはコンパイルされません – mpiatek

+0

Kenのコメントについてより明確にするために、値0(またはNUL)は文字列を効果的に '終了'します。 – polarysekt

答えて

0

a)誤った中かっこがあります。

b)s[j] = 0からs[j] = '0'に変更する必要があります。

c)エラーではありませんが、わかりやすくするために、2番目のforループの周りに中括弧を追加します。これにより、コードを読みやすくなります。

#include <cstring> 
#include <iostream> 

using namespace std; 
int const limit = 100000; 

int main() { 
    int k; 
    char s[limit]; 

    cin >> k; 
    cin >> s; 

    for (int i = 0; i < k; i++) { 
     for (int j = 0; j < strlen(s); j++) { 
      if (s[j + 1] == '0' && s[j] == '1') { 
       s[j + 1] = '1'; 
       s[j] = '0'; 
      } 
     } 
    } 

    cout << s; 

    return 0; 
} 
0

私が最初に上記の文を理解し始めるでしょう:あなたがあなたの名前の変数「リミット」に割り当てられているint const limit = 100000;手段(あなたがすでに知っているように)、100000の一定の整数値値100000があります単一の数値の整数。 '0'と '1'のASCII文字配列ではありません(私があなたの思考に正しく従っている場合)。 100000の数値は記憶域内の単一の場所に割り当てられ、コード内で変更することはできません。コードを別の値に変更しない限り(つまりint const limit = 15;) (意味を成さない)。

//私の考えは、このようなことをやろうとしていますか?

#include <iostream> 
#include <string> 

int(main) { 
int k = 10; 

char s[] = "0 1 0 1 0 1 1 0 1 1": // let the compiler count 

// create a nested for loop to change the '0' char to a '1' char here as you 
// want to do above. 
.... code .... 

return 0; 
} 

char配列[1]と1と0が入っているとします。次に、ASCIIシステムの指定が必要です。 '0'と '1'は配列宣言のような整数値ではない文字値です:s [limit]。 "限界"は、単一のint値です。あなたの配列[]は文字を格納するデータ型 "char"である "s"という名前です。 1つの数値を割り当てました。 TY>

0

は、名前空間stdを使用して

を含んは、(私が間違って考え、または、自分のコーディングをより良くすることができていた場合、私を修正してください)。 int const limit = 100000;

INTメイン(){

int k; 
char s[limit]; 



cout << "Enter a k limit: \n" ; 
cin >> k; 
cout << "You entered: " << k << endl; 
cout << "Enter your 0's and 1's. \n"; 
cin >> s; 
cout << "you entered: " << s << '\n'; 



for (int j = 0; j < k; j++) { 
    for (int i = 0; i < sizeof(s); i++) { 
     if (s[i + 1] == '0' && s[i] == '1') { 
      s[i + 1] = '1'; 
      s[i] = '0'; 
     } 
    } 
    cout << s; 

} 
return 0; 

}

+0

としてテストしてみました。 – timcodester

+0

Opps。ない。印刷します。ふりだしに戻る。 – timcodester

+0

あなたのコードが適切なコードセクションにあることを確認してください –

関連する問題