1. ホーム
  2. c++

[解決済み] C++の関数から文字列を返すには?[クローズド]

2022-03-14 10:42:14

質問

これは簡単なサンプルプログラムです。

#include <iostream>
#include <string>

using namespace std;

string replaceSubstring(string, string, string);

int main()
{
    string str1, str2, str3;

    cout << "These are the strings: " << endl;
    cout << "str1: \"the dog jumped over the fence\"" << endl;
    cout << "str2: \"the\"" << endl;
    cout << "str3: \"that\"" << endl << endl;
    cout << "This program will search str1 for str2 and replace it with str3\n\n";

    cout << "The new str1: " << replaceSubstring(str1, str2, str3);

    cout << endl << endl;
}

string replaceSubstring(string s1, string s2, string s3)
{
    int index = s1.find(s2, 0);

    s1.replace(index, s2.length(), s3);

    return s1;
}

コンパイルはできますが、関数は何も返しません。もし私が return s1return "asdf" を返します。 asdf . この関数で文字列を返すにはどうすればよいのでしょうか?

どのように解決するのですか?

の文字列に値を与えていない。 main したがって、この関数は明らかに空の文字列を返します。

置き換える。

string str1, str2, str3;

を使っています。

string str1 = "the dog jumped over the fence";
string str2 = "the";
string str3 = "that";


また、あなたはいくつかの問題を replaceSubstring 関数を使用します。

int index = s1.find(s2, 0);
s1.replace(index, s2.length(), s3);

  • std::string::find が返されます。 std::string::size_type (別名 size_t でなく int . 2つの違いがあります。 size_t は符号なしであり、必ずしも int は、プラットフォームによって異なります(例:64ビットのLinuxやWindowsでは size_t は64ビットの符号なしであるのに対し int は符号付き32ビット)。
  • 以下の場合はどうなりますか? s2 の一部でない場合は s1 ? それをどう修正するかは、あなたに任せるわ。ヒントは std::string::npos ;)