使用匹配替换随机字符串/字符数组字符
Posted
技术标签:
【中文标题】使用匹配替换随机字符串/字符数组字符【英文标题】:Replacement of random string/char array characters using match ups 【发布时间】:2010-07-22 02:22:28 【问题描述】:while (1)
char j;
if (x[j] == y[j])
在这里,我试图启动一个循环,我希望能够将 char 数组“x”中的任何字符与 char 数组“y”匹配。如果字符确实从 x 到 y 匹配,那么我希望它们保持原样,如果它们不匹配,我希望能够用星号 '*' 替换它们。 (例如x = [a,p,f]
和y = [a,p,p,l,e]
等在匹配和替换后y = [a,p,p,*,*]
和当我cout
它拼写出app**
)
我不知道如何设置以及应该使用哪种类型的循环。我对编程很陌生,我知道基本的替换和切换功能。
【问题讨论】:
y 中的一个字母是否应该保持不变,只要它在 x 中的某个位置,或者 y 中的每个字母都必须与 x 中相同索引处的字母匹配? 【参考方案1】:我认为这或多或少符合您的规定。
#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++ 对此也很满意。您可能需要在编译器上设置 GCC 的 C99 选项,例如“-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
【讨论】:
如果这是 C++ 代码,我认为你应该“#includex[j] == y[j]
' 位特别具有误导性),但是如果您查看预期的输出,我想您会发现实现的就是所要求的。如果您使用的是 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 数组而不是创建一个新数组。
【讨论】:
随着 i 的增加,这不是一次只匹配一个索引的数组吗? 是的。你想要一些不同的行为吗?如果 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']。在这种情况下,我必须构建一个循环,检查 y 中的所有索引和 x 中的第一个索引,然后检查 y 中的所有索引和 x 中的第二个索引,依此类推。 @Jonathan Leffler,我觉得这需要一个循环中的循环而不是之后的循环。以上是关于使用匹配替换随机字符串/字符数组字符的主要内容,如果未能解决你的问题,请参考以下文章