[英]How do I replace all occurrences in an array with another array in C
我想用另一个数组替换数组(字符串)中的所有匹配项。
我有一个代码:将字符串存储在要进行替换的数组中output[]
,将要搜索的字符串存储为replace[]
另一个数组,以及称为toBeReplacedBy
的第三个数组,并替换第一个出现的效果很好,但是它会跳过output
的其他出现
例如:
replace[]:
abc
toBeReplacedBy[]:
xyz
output[]:
abcdefabc
becomes
xyzdefabc
but it should become:
xyzdefxyz
我怀疑问题在于替换代码:
//the replacer
for (i = 0; i<80; i++) {
if (output[i] == replace[i])
output[i] = toBeReplacedBy[i];
}
//debug purpose
puts("output[]:\n");
puts(output);
return 0;
}
我在这里做错了什么以及如何获取它来替换数组中所有出现的错误。
请注意,我只希望使用stdio.h
来执行此操作
提前准备
永远不要迭代超过数组的长度。 这导致不确定的行为,甚至可能是危险的行为。 如果只希望使用字符串,请使用类似以下的内容:
int i = 0;
while(output[i] != '\0')
{
// your logic here
i++;
}
此外,您还要检查相同字符的并发外观。 但是在您的代码中,您仅检查前三个字符。 此后的一切都是不确定的行为,因为您不知道replace[3]
返回什么。
与此类似的东西可能会起作用:
int i = 0;
int j = 0;
int k;
while(output[i] != '\0')
{
if (output[i] == replace[j])
j++;
else
j = 0;
// replace 3 with the array length of the replace[] array
if (j == 3)
{
for(k = i; j >= 0; k-- )
{
output[k] = toBeReplacedBy[j]
j--
}
j = 0;
}
i++;
}
但是请检查数组边界。
编辑:另外,如Nellie所述,使用调试器将帮助您了解发生了什么问题。 逐步检查您的程序,并查看值的更改方式和时间。
首要建议是尝试调试您的程序,如果它不起作用。
for (i = 0; i<80; i++) {
if (output[i] == replace[i])
output[i] = toBeReplacedBy[i];
}
此循环中有两个问题。
第一个是迭代直到i
为80。让我们看看当i
变为3时会发生什么。在abcdefabc为d的情况下, output[3]
是什么,但是replace[3]
什么呢? 您的替换数组只有3个字母,因此一旦在原始字符串中出现一次替换数组,您就必须返回替换数组。
第二个是您逐字母检查。
假设您的原始数组的output
命名为abkdefabc ,前三个字母与替换字符串不匹配,但是您将检查前两个字母是否与替换字符串的前两个字母匹配,并且您将错误地更改它们。
因此,您需要首先检查整个替换字符串是否存在,然后再替换。
您应该使用strlen()知道数组的长度,或者迭代直到到达数组的末尾('\\ 0')。
'\\ 0'和strlen仅可用于char数组。
您的循环应如下所示:
int i = 0;
int len = strlen(my_string);
while (i < len)
{
//logic here
i = i + 1;
}
要么
int i = 0;
while (my_string[i] != '\0')
{
// logic here
i = i + 1;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.