Как убрать подстроку из массива
Возникла проблема с функцией, она неправильно убирает подстроку из массива. Есть массив в котором лежат символы нужные для генерации пароля. Выглядит так:
char alpha[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789#$%&@*^~"
И есть функция remove_substr которая убирает подстроку, например 0123456789. Осуществляется перебор массива и подстроки. По условию пытаюсь распознать цифры и поставить вместо них нулевый байт
void remove_substr(char *substr)
{
for (int j = 0; j < strlen(substr); j++) {
for (int i = 0; i < strlen(alpha); i++) {
if (substr[j] == alpha[i]) {
alpha[i] = '\0';
}
}
}
}
int main(void)
{
remove_substr("0123456789");
printf("%s\n", alpha);
return 0;
}
После того как функция отработает вывод получается таким:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
Цифры и специальные символы были убраны, а нужно было убрать только цифры. Как сделать так чтобы убирались только цифры? А специальные символы остались нетронутыми Заметил если поставить цифры после специальных символов в массиве alpha, то всё работает правильно
Еще я пытался писать так:
void remove_substr(char *substr)
{
char *match = alpha;
match = strstr(match, substr);
*match = '\0';
strcat(alpha, match);
}
Но здесь тоже убираются и цифры и специальные символы
Ответы (1 шт):
Получилось сделать с помощью memmove
char alpha[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789#$%&@*^~";
void remove_substr(char *substr)
{
int len_alpha = strlen(alpha);
int len_sub = strlen(substr);
for (int i = 0; i < len_alpha; i++) {
for (int j = 0; j < len_sub; j++) {
if (alpha[i] == substr[j]) {
memmove(&alpha[i], &alpha[i + 1], len_alpha - i);
}
}
}
}
Помог этот вопрос