значения:Как заменить символы перед определенным символом?
hw:2,0
Я хочу, чтобы заменить строку перед тем : с dsnoop
Результат:
dsnoop:2,0
Или обратный dsnoop
с hw
Я имею т его функция, чтобы найти бесполезные устройства
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;
}
Я рекомендую вам прочитать ['strchr'] (http://en.cppreference.com/w/c/string/byte/strchr), [' strcpy'] (http: //en.cppreference .com/w/c/string/byte/strcpy) и ['strcat'] (http://en.cppreference.com/w/c/string/byte/strcat), они все, что вам нужно (плюс временный буфер). –
Похож на вещь ALSA. Не уверен, но нет ли уже функций для дифференциации устройств, а не для разбора последовательностей символов? – Olaf