Удалить из строки подряд идущие цифры - C (СИ)
Формулировка задачи:
не могу разобраться со строками в си... я новичок.
Решение задачи: «Удалить из строки подряд идущие цифры»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
void pars(char *str);
void shift(char *s);
int digit(char c);
int main(void) {
char string[100] = "a+12.3456-b-0.456789+1.3-45678";
printf("%s\n", string);
pars(string);
printf("%s\n", string);
return EXIT_SUCCESS;
}
void pars(char *str) {
while (*str) {
if (*str == '.' && digit(*(str + 1)) && digit(*(str + 2))) {
str += 3;
while (digit(*str)) {
shift(str);
}
} else {
++str;
}
}
}
void shift(char *s) {
while (*s) {
*s = *(s + 1);
++s;
}
}
int digit(char c) {
if (c >= '0' && c <= '9') {
return 1;
} else {
return 0;
}
}
Объяснение кода листинга программы
В данном коде реализована функция pars, которая удаляет из строки подряд идущие цифры. Для этого в функции используется два вспомогательных действия:
- Функция
digitпроверяет, является ли символ цифрой. Если да, то возвращается 1, иначе возвращается 0. - Функция
shiftсдвигает все символы в строке на один вправо. В функцииparsпроисходит следующее: - Проверяется текущий символ строки. Если это точка, и следующие за ней два символа являются цифрами, то выполняется следующее действие.
- Строка сдвигается на три символа вперед, и в цикле, пока следующий символ является цифрой, выполняется действие из пункта 1.
- Если текущий символ не является точкой, то он пропускается, и строка сдвигается на один символ вперед.
В функции
mainсоздается строка, выводится на экран, затем вызывается функцияpars, после чего строка снова выводится на экран. Пример входных и выходных данных: Входные данные:a+12.3456-b-0.456789+1.3-45678Выходные данные:a+.3456-b-0.456789+.3-45678