2016-12-06 33 views
1

私は文字列から一度に1文字を削除する方法を見つけようとしているので、一度に1文字しか欠落している文字列のすべてのバージョンを取得できます。これは私が仕事をしようとしているものですが、役に立たないものです。文字列から一度に1文字を削除するにはどうすればよいですか?

for(int i = 0 ; i < s.length() ; i++){ 
    tmp.erase(0, i); 
    std::cout << tmp << std::endl; 
    s.at(i)++; 
} 

明らかに最初のものに対しては正しく動作しますが、残りは削除されます。 はJONがON JN JO

+0

それは*正確*のために任意のサイズ – Gman

答えて

0

最も簡単な方法は、文字列のコピーごとに行い、コピー、変更することがあるの予想出力れている必要があります。正しさのために

for(std::string::size_type i = 0 ; i < s.size() ; i++){ 
    auto tmp=copy; 
    tmp.erase(i, 1); 
    std::cout << tmp << std::endl; 
} 

を、インデックス変数があるべきstd::string::size_type、どちらもlength()size()が返されます(size_tsize()は自然に一緒に属しています)。

あなたのコードは、たびに文字列のコピーを作成することを怠ったことを除いて、ほぼ正しくなっています。s.at(i)++はそこに属していません。

+1

の文字列を処理する必要が@FirstStep、インデックスは 'のstd ::文字列でなければなりません:: size_type'月か'size_t'でないかもしれません。また、 'tmp.erase(i)'は、指定されたインデックスから文字列の最後までのすべての文字を消去します。ただ一つの文字を消去するには、 'tmp.erase(i、1)'や 'tmp.erase(tmp.begin()+ i)'を使う必要があります。 –

+0

ありがとうございます。修正されました。 –

+0

@SamVarshavchikああ、それは意味をなさない!ありがとうございました。 LOL smhはs.at(i)++で... – Gman

2

tmpは、各ループ反復で元の文字列値にリセットされないため、空になるまでより多くの文字をtmpから消去し続けます。

また、ループの繰り返しごとに間違った文字範囲を削除しています。

オリジナルの文字列を各ループの繰り返しで変更して、個々の文字の値を増やしています。どうしてそんなことをやっているのですか?

代わりに、より多くのこのような何かを試してみてください:

for(std::string::size_type i = 0 ; i < s.length() ; i++){ 
    std::string tmp = s; 
    tmp.erase(i, 1); 
    std::cout << tmp << std::endl; 
} 
関連する問題