1

我必须创建一个程序,用第二个参数替换第一个参数中的所有字母。例如,如果传递的字符串是“How now cow”,并且该函数将所有 'o' 替换为 'e',那么新字符串将是:“Hew new cew.”......我在第 9 行不断收到错误消息,返回无效部分。

#include <iostream>
using namespace std;

string replace(string mystring){
    replace(mystring.begin(), mystring.end(),  'e',  'o');
    return void;
}
4

4 回答 4

6

您只需要返回修改后的字符串,使用return mystring;而不是return void;

于 2012-11-19T01:26:13.773 回答
5
string replace(string mystring){

这个函数叫做replace,接受一个字符串作为参数并返回一个字符串,这由这个原型中函数名之前的类型表示。

如果它希望你返回一个string,你不能return void;因为void不是string类型。

因此,您需要return mystring;改为返回一个string

于 2012-11-19T01:26:45.890 回答
1

而不是返回无效,做

replace(mystring.begin(), mystring.end(),  'e',  'o');
return mystring;

编辑:刚刚意识到我说的是错误的语言。对不起大家。

于 2012-11-19T01:26:57.920 回答
0

不是很优雅,但它会完成工作。现在您可以用其他字符串替换字符串 - 或者只使用一个字符长的字符串(类似于您在示例中所做的)。

#include <iostream>
#include <cstdlib>
#include <string>

std::string string_replace_all( std::string & src, std::string const& target, std::string const& repl){

        if (target.length() == 0) {
                // searching for a match to the empty string will result in                                                                                                                                                                    
                //  an infinite loop                                                                                                                                                                                                           
                //  it might make sense to throw an exception for this case                                                                                                                                                                    
                return src;
        }

        if (src.length() == 0) {
                return src;  // nothing to match against                                                                                                                                                                                       
        }

        size_t idx = 0;

        for (;;) {
                idx = src.find( target, idx);
                if (idx == std::string::npos)  break;

                src.replace( idx, target.length(), repl);
                idx += repl.length();
        }

        return src;
}

int main(){

    std::string test{"loool lo l l l    l oooo l loo o"};
    std::cout << string_replace_all(test,"o","z") << std::endl;


    return EXIT_SUCCESS;
}

输出: lzzzl lz llll zzzz l lzz z


如果您要使用自己的实现,请小心并检查您的边缘情况。确保程序不会在任何空字符串上崩溃。

于 2012-11-19T01:48:57.597 回答