C++ 使用匹配替换随机字符串/字符数组字符

C++ 使用匹配替换随机字符串/字符数组字符,c++,string,arrays,replace,C++,String,Arrays,Replace,在这里,我试图开始一个循环,在这个循环中,我希望能够将字符数组“x”中的任何字符与字符数组“y”进行匹配。如果字符从x到y匹配,那么我希望保持它们的原样,如果不匹配,我希望能够用星号“*”替换它们。(即x=[a,p,f]和y=[a,p,p,l,e],因此在匹配和替换y=[a,p,p,*,*]之后,当我cout时,它会拼出app**) 我不知道如何设置,我应该使用什么类型的循环。我对编程很熟悉,我知道基本的替换和切换函数。 如果使用C++字符串类,这将更容易,但这里是C字符串的答案。 while

在这里,我试图开始一个循环,在这个循环中,我希望能够将字符数组“x”中的任何字符与字符数组“y”进行匹配。如果字符从x到y匹配,那么我希望保持它们的原样,如果不匹配,我希望能够用星号“*”替换它们。(即
x=[a,p,f]
y=[a,p,p,l,e]
,因此在匹配和替换
y=[a,p,p,*,*]
之后,当我
cout
时,它会拼出
app**


我不知道如何设置,我应该使用什么类型的循环。我对编程很熟悉,我知道基本的替换和切换函数。

如果使用C++字符串类,这将更容易,但这里是C字符串的答案。
while (1)
{
    char j;
    if (x[j] == y[j])

编辑:我注意到您想更改y数组,而不是创建一个新数组。

我认为这或多或少符合您的指定

int i = 0;
while (x[i] != '\0' && y[i] != '\0') {
    if (x[i] != y[i]) {
        y[i] = '*';
    }
    i++;
}
y[i] = '\0'; // C strings are terminated with the null character
输出
当我增加时,这不是一次只匹配数组一个索引吗?是的。你想要一些不同的行为吗?如果x=['a'、'b'、'c'、'd'、'\0']和y=['a'、'p'、'c'、'd'、'\0']呢?那么,您希望结果像我想象的那样['a'、''c'、'd'、'\0'],还是['a'、''''、'''\0'],只保留匹配的开头字符?在这个问题的解释下(这是我第一次尝试),您还需要删除多余的字符。您的代码在示例数据上生成“ap*”而不是“app**”。你需要在这之后添加一个循环来消除多余的字符。是的,这就是我的意思。如果x=['a'、'b'、'c'、'd'、'\0']和y=['a'、'p'、'c'、'd'、'\0'],结果将是['a'、'*'、'c'、'd'、'\0']。在这种情况下,我必须构建一个循环,用x中的第一个索引检查y中的所有索引,然后用x中的第二个索引检查y中的所有索引,依此类推@Jonathan Leffler,我觉得这需要一个循环内的循环,而不是事后的循环。如果这是C++代码,我认为你应该“包含”和“使用STD::Strucr”而不是“γ包含”。搜索一个字符的第一个出现,如果没有找到它,返回0。这样的话,Y的每个字符是否都在x的某个位置,不管它的位置如何?@拖延:通过包含,我不必写“STD::StrucR”或“使用STD;”。但是,你是正确的,最好使用C++头。代码看起来是这样的。看看我正在查看的y(苹果)中的当前字符是否出现在x(apf)中的列表中。我一开始被这个问题误导了(“
x[j]==y[j]
”位特别容易误导),但如果你查看预期的输出,我想你会看到实现的是所请求的。那么这个循环是否执行了“if x”=['a'、'b'、'c'、'd'、'\0']和y=['a'、'p'、'c'、'd'、'\0']结果是['a'、'*'、'c'、'd'、'\0']”函数?这正是我所需要的函数。非常感谢。y中的一个字母应该保持不变,只要它在x中的某个位置,还是y中的每个字母必须在同一索引处与x中的一个字母匹配?
#include <string.h>

for (int j = 0; y[j] != '\0'; j++)
{
    if (strchr(x, y[j]) == 0)
        y[j] = '*';
}
#include <string.h>
#include <stdio.h>

static void doit(const char *x, char *y)
{
    printf("Before: x = %s, y = %s\n", x, y);
    for (int j = 0; y[j] != '\0'; j++)
    {
        if (strchr(x, y[j]) == 0)
            y[j] = '*';
    }
    printf("After:  x = %s, y = %s\n", x, y);
}

int main(void)
{
    const char x1[] = "apf";
    const char x2[] = "apcd";
    char       y1[] = "apple";
    char       y2[] = "abcd";

    doit(x1, y1);
    doit(x2, y2);
    return 0;
}
Before: x = apf, y = apple
After:  x = apf, y = app**
Before: x = apcd, y = abcd
After:  x = apcd, y = a*cd