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

时间:2010-07-22 02:22:29

标签: c++ string arrays replace

while (1)
{
    char j;
    if (x[j] == y[j])

这里我试图启动一个循环,我希望能够匹配char数组'x'中的任何字符与char数组'y'。如果字符确实匹配从x到y,那么我想保持原样,如果它们不存在,我希望能够用星号'*'替换它们。 (e.i。x = [a,p,f]y = [a,p,p,l,e]等匹配和替换后y = [a,p,p,*,*]以及我cout时拼出app**

我不知道如何设置它以及我应该使用什么类型的循环。我对编程很新,我知道基本的替换和切换功能。

2 个答案:

答案 0 :(得分:0)

我认为这或多或少都是你指定的。

#include <string.h>

for (int j = 0; y[j] != '\0'; j++)
{
    if (strchr(x, y[j]) == 0)
        y[j] = '*';
}

测试程序

@LooneyTunes询问会发生什么:x[] = "apcd"y[] = "abcd" - 你得到"a*cd"。 答案是。这是一个演示结果的测试程序。就我而言,它是纯C代码,尽管G ++也非常满意。您可能需要C99选项,例如在编译器上设置了GCC的“-std=c99”。如果MSVC将其编译为C代码,它将不会喜欢它;在函数顶部声明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

答案 1 :(得分:-1)

如果使用C ++字符串类,这会更容易,但这里是C字符串的答案。

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

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