【发布时间】:2017-09-07 15:00:47
【问题描述】:
我正在尝试一个使用数组的短代码,当我调用我的函数 WordReplace 时,我基本上想用恨换爱,但我一直在打印同样的东西:
我不喜欢 C++ 我不喜欢c++
我尝试了不同的方法,但我不确定哪里出了问题
#include <iostream>
#include <string>
using namespace std;
void WordReplace(string*x, int start, int end, string g, string w)
{
for (int z = start; z <= end; z++)
{
if (x[z] == g)
x[z] == w;
cout << x[z]<<" ";
}
}
int main()
{
string x[4] = {"I", "don't", "hate", "c++"};
for (int i = 0; i < 4; i++)
{
cout << x[i] << " ";
}
cout << endl;
WordReplace(x, 0, 3, "hate", "love");
cout << endl;
return 0;
}
【问题讨论】:
-
x[z] == w应该是x[z] = w。在您最喜欢的 C++ 教科书中了解=和==之间的区别。 -
这也可能有助于为您的变量提供更直观的名称。至少
g和w不要为我这样做。但@IgorTandetnik 有你的答案。 -
我尝试了不同的方法 -- 除了
std::replace算法函数,它在一行代码中完成了这项工作。关键是,如果您编写的代码感觉之前必须完成数百万次(例如将 x 替换为 y),那么很可能有一个 STL 算法函数可以完成这项工作(如果不是一组函数)。 -
实际上 gcc 5.1.0 不会产生任何警告。原因似乎是运算符重载。当
std::string替换为int时,会按预期产生警告“statement has no effect”。 -
尝试使用
std::vector<std::string>而不是数组。更容易传递给函数。