TransWikia.com

Как убрать подстроку из массива

Stack Overflow на русском Asked by karaname on December 19, 2021

Возникла проблема с функцией, она неправильно убирает подстроку из массива.
Есть массив в котором лежат символы нужные для генерации пароля. Выглядит так:

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] = '';
      }
    }
  }
}

int main(void)
{
  remove_substr("0123456789");
  printf("%sn", alpha);
  return 0;
}

После того как функция отработает вывод получается таким:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

Цифры и специальные символы были убраны, а нужно было убрать только цифры. Как сделать так чтобы убирались только цифры? А специальные символы остались нетронутыми
Заметил если поставить цифры после специальных символов в массиве alpha, то всё работает правильно

Еще я пытался писать так:

void remove_substr(char *substr)
{
 char *match = alpha;
 match = strstr(match, substr);
 *match = '';
 strcat(alpha, match);
}

Но здесь тоже убираются и цифры и специальные символы

One Answer

Получилось сделать с помощью 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);
      }
    }
  }
}

Помог этот вопрос

Answered by karaname on December 19, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP