-3

宿題が非常にややこしく、正しく行う方法がわかりません。この割り当てでは、C++ 関数を完成させて文字列を解析し、部分文字列 oldStr のすべての出現箇所を文字列 newStr のインスタンスと交換するよう求めています。置換の結果、inputStr のサイズを変更する必要がある場合があります。つまり、oldStr と newStr は同じサイズである必要はありません。関数ヘッダーが提供されます。検索と置換機能だと思いますが、それが正しい仮定であるかどうかはわかりません。inputStr にはクラス型が必要であるというエラーも表示されますか? .find と .replace の左側には、class/struct/union が必要ですか? どんな提案でも大歓迎です。

void parseSwap( char* inputStr, const char* oldStr, const char* newStr  )
{
size_t oldStrLength = strlen(oldStr);
size_t newStrLength = strlen(newStr);
size_t position = 0;

while ((pos = inputStr.find(oldStr, position)) != string::npos)
{
  inputStr.replace( position, oldStrLen, newStr );

  position += newStrLen; 

}
4

3 に答える 3

1

C スタイルの文字列 ( char*) を C++ の文字列 ( string) のように使用しています。

C パーツ:

  • strlen()- C 文字列の長さを見つけるために使用される関数
  • inputStr, oldStr,newStrはすべて C 文字列です

C++ の部分:

  • string文字列を表す C++ のクラスです。
  • 関数find()replace()length()は、string
  • string::npos

この C++ コードで十分です。ヘッダー<iostream><string>.

void parseSwap(string& inputStr, const string& oldStr, const string& newStr)
{
    size_t oldStrLen = oldStr.length();
    size_t newStrLen = newStr.length();
    size_t position = 0;

    while ((position = inputStr.find(oldStr, position)) != string::npos)
    {
      inputStr.replace( position, oldStrLen, newStr );

      position += newStrLen; 

    }
}

関数の引数を変更できず、それでも古いコードを使用したい場合は、これを使用してください。ただし、上記のヘッダーを含める必要があります。

void parseSwap( char* inputStr, const char* oldStr, const char* newStr  )
{
    string input_string(inputStr);
    string old_string(oldStr);
    string new_string(newStr);
    size_t position = 0;

    while ((position = input_string.find(old_string, position)) != string::npos)
    {
      input_string.replace( position, old_string.length(), new_string );
      position += new_string.length();
    }

    strcpy(inputStr, input_string.c_str());
}
于 2013-07-05T17:13:19.527 に答える