让我们说我有一个二维字符数组,看起来像:
ooooooooo
ooooooooo
ooooooooo
ooooxoooo
ooooooooo
ooooooooo
ooooooooo
让我说我想替换所有的o改为我,所以它看起来像这样:
IIIIIIIII
IIIIIIIII
IIIIIIIII
IIIIxIIII
IIIIIIIII
IIIIIIIII
IIIIIIIII
当前从用户获取输入的方式是使用命令行:
int main(int argc, char* argv[]) {
这是我到目前为止提出的:
void replacee(vector<vector<char>> &vec, char oldd, char neww) {
for(vector<char> v:vec)
// change
{
for(char c:v)
if (c == oldd) {
c == neww;
}
}
}
Ps。抱歉,如果这是一个简单的解决方案,那是c ++的新手,并且ive查找了其他人执行此操作的方式,但他们始终使用String的向量而不是char的向量。
答案 0 :(得分:3)
您的外部循环需要对内部向量进行引用。如果没有引用,则内部循环仅修改向量的副本。一个建议是,使用标准库算法而不是循环来修改值。
#include <algorithm>
void replacee(vector<vector<char>> &vec, char oldd, char neww)
{
for (vector<char> &v : vec) // reference to innver vector
{
replace(v.begin(), v.end(), oldd, neww); // standard library algorithm
}
}
答案 1 :(得分:2)
请注意=
和==
之间的关键区别。表达式c == oldd
是相等性测试。也就是说,如果true
和c
具有相同的值,则返回oldd
,否则返回false
。另一方面,像c = neww
这样的表达式是 assignment ,这意味着neww
的值被复制到变量{{1 }}。
此外,在for循环中,如果要进行持久更改,则应按引用遍历元素 。
c
尝试此修复程序:
for(vector<char> v : vec){ /* v is a copy, changing it will leave no effect */ }
for(vector<char>& v : vec){ /* v is a reference, changes to it will be visible outside */ }
希望有帮助!编码愉快
答案 2 :(得分:1)
您超级亲密!您只有两个错误。
20000
(比较它们而不执行任何操作)更改为c == neww;
。c = neww;
是每一行中每个值的副本。这就像在循环中添加两个c
一样简单。当一切都说完了,您修复了缩进并使格式停留在同一行或下一行的大括号时,事情应该像这样:
&
在此处查看其工作原理:ideone
答案 3 :(得分:1)
void replace(vector<vector<char>> &vec, char oldd, char neww) {
for(auto v : vec)
{
for(auto c : v)
if (c == oldd) {
c = neww;
}
}
}
您在这里。 C ++允许您在foreach循环等中使用auto,它非常简洁。