C ++替代函数

时间:2013-08-08 11:51:36

标签: c++ pointers

我在使用以下代码时遇到了一些问题:

/* replace c1 with c2 in s, returning s */
char *substitute(char *s, char c1, char c2)
{
    char *r = s;
    if (s == 0) return 0;
    for (; *s; ++s)
        if (*s == c1) *s = c2;
    return r;
}

void substitute(char c1, char c2);

int main()
{
    string s = "apples";
    char a;
    char b;

    cout << "Before swap of Char : " << s << endl;

    *substitute(&a, &b);

    cout << "After swap of Char : " << s << endl;

    system("pause");
}

上面的代码应该用char1替换字符串中出现的char2。我认为我的功能正确,但调用它有点问题,因为main中的Substitute部分显示错误。

我的问题是如何从这里继续并在main中调用该函数?

编辑: 我已经阅读了已经给出的答案,但我仍然很困惑该怎么做,因为我是初学者..

再次编辑: 我已经解决了! :)

5 个答案:

答案 0 :(得分:1)

如果您使用的是c ++(11),则可能需要使用标准库和语言工具:

 std::string input = "apples";
 const char from='a';
 const char to='b';
 std::for_each(input.begin(),input.end(),
  [&](char& current) {
   if(current==from)
    current=to;
 });

或更简洁

for (char& current : input) {
   if(current==from)
     current=to;
}

答案 1 :(得分:0)

当你的函数需要3时,你传递了两个参数,而且函数本身不会按预期工作。

另外,在旁注中,使用cin.get()而不是system(&#34; pause&#34;);

只需使用方法替换字符串类。

答案 2 :(得分:0)

以下是我在代码中看到的问题:

  1. substitute()应获得3个参数char*,char,char,或者稍后您有一个函数substitute(char,char)。但是,您正在向它发送char*,char*,因此编译器不知道要调用的函数(除非您有另一个具有此签名的函数,此处未显示)。这就是编译时错误

  2. 的原因
  3. 您正在尝试修改字符串文字 ,如果您要修复编译,可能会创建运行时错误时间错误。请注意,不应修改字符串“apples”,因为它是字符串文字。您需要复制它然后更改它。正如@ 6502(评论参考)

  4. 所指出的那样,修改它的确切行为是未定义的
  5. 您的代码质量不佳(虽然编辑修复了此问题)。

  6. a,b未初始化并包含“垃圾”值。

答案 3 :(得分:0)

初始化 a b ,然后将替换方法调用为substitute(s,&a, &b);

删除方法原型void substitute(char c1, char c2);,因为您不需要它。

答案 4 :(得分:0)

按原样,你可以这样调用函数:

char a = 's', b='t';
char s[] = "some string";
s = substitute(s, a, b);

第二个和第三个参数不是指针,因此您只需传递ab,就不必传递&a&b

请注意,由于您只是在第一个参数中修改字符串,因此没有理由将其分配给任何内容。 substitute(a, b);s = substitute(s, a, b);完全相同。

如果您不必使用返回值,那么首先没有理由将其返回。您可以将功能更改为:

/* replace c1 with c2 in s, returning s */
void substitute(char *s, char c1, char c2)
{
    if (s == 0) return;
    for (; *s; ++s)
        if (*s == c1) *s = c2;
}