1

私はプログラミングの初心者なので、問題に間違った方法でアプローチした場合は気をつけてください。私はこれを課題としてやっています。私の目的は、ユーザーから文字列を取得し、すべての文字を別の記号に置き換えることです。以下のコードは、すべての As を検索し、それを *s に置き換えることになっています。私のコードはまったく予期しない結果を示しています。また、_deciphered.length() の目的は何ですか。

例: 「I Am A bAd boy」は「I *m * b*d boy」に変換する必要があります。

次に、すべての大文字と小文字と数字に対してそれを実装し、別の記号に置き換えたり、その逆を行ったりして、小さなエンコード/デコード プログラムを作成することになっています。

#include <iostream>
#include <string>
using namespace std;
string cipher (string);
void main ()
{

    string ciphered, deciphered;
    ciphered="String Empty";
    deciphered="String Empty";
    cout<<"Enter a string to \"Encode\" it : ";
    cin>>deciphered;
    ciphered=cipher (deciphered);
    cout<<endl<<endl;
    cout<<deciphered;
}
string cipher (string _deciphered)
{
    string _ciphered=(_deciphered.replace(_deciphered.find("A"), _deciphered.length(), "*"));
    return _ciphered;
}
4

3 に答える 3

4

既に標準ライブラリを使用されているようですので、

#include <algorithm> // for std::replace

std::replace(_deciphered.begin(), _deciphered.end(), 'A', '*');

これを手動で行う必要がある場合は、std::stringが のコンテナのように見えるcharことに注意してください。したがって、その内容を繰り返し処理し、各要素が'A'であるかどうかを確認し、そうであれば に設定し'*'ます。

作業例:

#include <iostream>
#include <string>
#include <algorithm>

int main()
{
  std::string s = "FooBarro";
  std::cout << s << std::endl;
  std::replace(s.begin(), s.end(), 'o', '*');
  std::cout << s << std::endl;
}

出力:

フーバロ

ファ**バー*

于 2013-10-23T15:48:29.607 に答える
1

使用できますstd::replace

std::replace(deciphered.begin(), deciphered.end(), 'A', '*');

また、std::replace_if特定の基準に一致する複数の値を置換する場合にも使用できます。

std::replace_if(deciphered.begin(), deciphered.end(), myPredicate, '*');

whereは、置換する基準に文字が一致するかどうかをmyPredicate返します。trueたとえば、 と の両方を置き換えたい場合は、aAを返しmyPredicatetrue他の文字を false にする必要があります。aA

于 2013-10-23T15:49:13.430 に答える