Если в строке символов подряд встречаются буква и цифра, то удалить цифру - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Ввести произвольной строку символов. если подряд встречаются буква i цифра, то изъять цифру; Посчитать количество выполненных операций удаления. Вывести полученную строку.

Решение задачи: «Если в строке символов подряд встречаются буква и цифра, то удалить цифру»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
int chisloli(char a)
{
    if(a > '0' && a < '9') return 1;
    return 0;
}
void swap(char *a , char *b)
{
    char tmp = *a;
    *a = *b;
    *b = tmp;
}
int main()
{
    char mas[20];
    gets(mas);
    int i;
    int m = 0;
    int j;
    for(i = 0; i < strlen(mas); i++) {
        if(!chisloli(mas[i]) && chisloli(mas[i+1])) {
            m++;
            for(j = i+1; j < strlen(mas);j++) swap(&mas[j], &mas[j+1]);
            mas[j] = '\0';
        }
    }
    printf("%s", mas);
}

Объяснение кода листинга программы

  1. #include - подключает файл стандартного ввода/вывода
  2. #include - подключает файл стандартных функций
  3. int chisloli(char a) - функция принимает один аргумент типа char, проверяет является ли символ цифрой, если да, то возвращает 1, иначе 0
  4. void swap(char a , char b) - функция принимает два указателя на символы и меняет их местами
  5. int main() - функция main() является точкой входа в программу
  6. char mas[20]; - объявление массива символов на 20 элементов
  7. gets(mas); - ввод строки с помощью функции gets()
  8. int i; - объявление переменной для цикла
  9. int m = 0; - объявление переменной для подсчета количества пар символов, где первый не является цифрой, а второй является
  10. int j; - объявление переменной для цикла
  11. for(i = 0; i < strlen(mas); i++) { - цикл по всем символам строки
  12. if(!chisloli(mas[i]) && chisloli(mas[i+1])) { - проверка, что текущий символ не цифра и следующий символ является цифрой
  13. m++; - увеличение счетчика, если условие выполняется
  14. for(j = i+1; j < strlen(mas);j++) swap(&mas[j], &mas[j+1]); - цикл, который меняет местами символы, начиная с i+1 и до конца строки, при этом не меняя последний символ (так как он уже за пределами массива)
  15. mas[j] = '\0'; - добавление нулевого символа в конец строки после всех перемещений
  16. } - конец условия проверки
  17. printf(%s, mas); - вывод строки на экран с помощью функции printf()
  18. } - конец цикла for()
  19. } - конец функции main()
  20. } - конец программы

Оцени полезность:

9   голосов , оценка 3.556 из 5
Похожие ответы