gpt4 book ai didi

c - 如何替换特定字符之前的字符?

转载 作者:太空宇宙 更新时间:2023-11-04 04:59:41 26 4
gpt4 key购买 nike

值(value)观:

hw:2,0

我想用dsnoop

替换 :之前的字符串

结果:

dsnoop:2,0

或者用hw反转dsnoop

我有这个功能可以找到无用的设备

bool useless_device(char *device) {
char *example[] = { "dsnoop", "dmix", "hw" };
for (int i = 0; i < ARRAY_SIZE(example); i++) {
int l = strlen(example[i]);
if (device && strncmp (device, example[i], l) == 0 && (!device[l] || device[l] == ':'))
return true;
}
return false;
}

我正在尝试制作一个函数,它将输入一个字符串并将 hw 替换为 dsnoop(反之亦然)。因此,对于 "hw:x,y",应该返回 "dsnoop:x,y"(反之亦然)。

char *useless_device(const char *device) {
int i, j;
char *useless[] = { "dsnoop", "hw" };
char *result = NULL;

char *dev;
dev = g_strdup(device);
for (i = 0; i < ARRAY_SIZE(useless); i++) {
char *buf;
int len = strlen(useless[i]);
if (strncmp (dev, useless[i], len) == 0 && (!dev[len] || dev[len] == ':')) {
buf = g_strdup (&dev[len]);
j = (i + 1) % ARRAY_SIZE(useless);
result = g_strconcat(useless[j], buf, NULL);
g_free(buf);
}
}
g_free(dev);

return result;
}

最佳答案

您的函数失败的原因是您在找到匹配项后没有从循环中跳出。因此替换可以发生两次,有效地 self 取消。

您可以通过这种方式修复和简化函数:

char *useless_device(const char *device) {
int i;
const char *useless[] = { "dsnoop", "hw" };

for (i = 0; i < ARRAY_SIZE(useless); i++) {
int len = strlen(useless[i]);
if (strncmp(device, useless[i], len) == 0 &&
(!device[len] || device[len] == ':')) {
return g_strconcat(useless[i ^ 1], device + len, NULL);
}
}
return NULL;
}

这也适用于具有多对要交换的名称的数组。

关于c - 如何替换特定字符之前的字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34931430/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com