我在使用以下代码时遇到了一些问题:
/* 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中调用该函数?
编辑: 我已经阅读了已经给出的答案,但我仍然很困惑该怎么做,因为我是初学者..
再次编辑: 我已经解决了! :)
答案 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)
以下是我在代码中看到的问题:
substitute()
应获得3个参数,char*,char,char
,或者稍后您有一个函数substitute(char,char)
。但是,您正在向它发送char*,char*
,因此编译器不知道要调用的函数(除非您有另一个具有此签名的函数,此处未显示)。这就是编译时错误
您正在尝试修改字符串文字 ,如果您要修复编译,可能会创建运行时错误时间错误。请注意,不应修改字符串“apples”,因为它是字符串文字。您需要复制它然后更改它。正如@ 6502(评论参考)
您的代码质量不佳(虽然编辑修复了此问题)。
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);
第二个和第三个参数不是指针,因此您只需传递a
和b
,就不必传递&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;
}