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);
}
Но здесь тоже убираются и цифры и специальные символы
Получилось сделать с помощью 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
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP