Напечатать все предложения текста не начинаются на букву "А" - C (СИ)

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

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

Ввести текст, состоящий из нескольких предложений. Каждое предложение сохраняется как элемент массива. Напечатать все предложения текста не начинаются на букву "А", предварительно превратив каждое из них по следующему правилу если предложение содержит нечетное количество слов, то изъять его среднее слово..

Решение задачи: «Напечатать все предложения текста не начинаются на букву "А"»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
void getstring(char *s) // Считывание строки
{
    int c;
    while((c = getchar()) != '\n') {
        *s = c;
        *++s;
    }
    *s = '\0';
}
void swap(char *a, char *b) // Обмен символов местами
{
    char tmp = *a;
    *a = *b;
    *b = tmp;
}
int kolvo(char *s) // Колличество слов в строке
{
    int m = 0;
    while(*s != '\0') {
        if(*s == ' ' || *s == '\0') m++;
        *++s;
    }
    return m;
}
void getint(int *a) { // Считывание переменной типа int
    int c;
    int d = 0;
    while((c = getchar()) != '\n') d = d*10 + c - '0';
    *a = d;
}
int main()
{
    int n;
    getint(&n); //Колличество строк
    char **v = (char *)malloc(n); //Выделяем место для указателя на указатели
    int i;
    for(i = 0; i < n;i++)
        v[i] = (char*)malloc(20);//Выделяем место для каждой строки
    //*************************************************
    for(i = 0; i<n;i++) {
        printf("Write %d - th sentence\n",i+1);
        getstring(v[i]);//Считываем строки
    }
    int j = 0;
    int k = 0;
    int o = 0;
    int z = 0;
    int m = 0;
    int f = 0;
    for(i = 0; i < n;i++) {
        if(!(kolvo(v[i]) % 2) && (v[i][0] != 'A' && v[i][0] != 'a')) { //В случае если колличество слов не четно и первый символ не равен 'A' начинаем удаление слова
            j = kolvo(v[i])/2;//середина
            while(1) {//Перебираем каждый символ
                if(v[i][k] == ' ' || v[i][k] == '\0') { //Если символ равен пробелу или концу строки то :
                    o++; // + слово
                    if(o == j+1) { //Если слово в середине
                        f = strlen(v[i]); //Длина всей строки
                        for(m = k; m<f || m-z < f; m++) {//Сдвигаем массив на z элементов влево , удаляя z символов в конце
                            swap(&v[i][m-z],&v[i][m]); //Меняем символы местами
                            v[i][m] = 0;
                        }
                    }
                    if(v[i][k] == '\0')break;//Если конец то выходим из цикла
                    z = 0;
                }
                z++;
                k++;
            }
            k = 0;
            z = 0;
            o = 0;
            printf("%s\n", v[i]);
        } else if((kolvo(v[i])% 2) && (v[i][0] != 'A' && v[i][0] != 'a')) printf("%s\n", v[i]); //Если четно то просто выводим
    }
}

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

  1. Объединение всех функций и основной функции main() в одном файле.
  2. Включение заголовочного файла stdlib.h, необходимого для использования функции malloc() и free().
  3. Создание массива строк из 20 элементов для каждого подмассива.
  4. Использование функции getint() для считывания целочисленного значения.
  5. Использование функции getstring() для считывания строки.
  6. Создание функции swap() для обмена символами местами.
  7. Создание функции kolvo() для подсчета количества слов в строке.
  8. Создание функции void getint(int *a) для считывания целочисленного значения.
  9. Создание функции void getstring(char *s) для считывания строки.
  10. Создание функции void swap(char a, char b) для обмена символами местами.
  11. Создание функции int kolvo(char *s) для подсчета количества слов в строке.
  12. Создание функции void getint(int *a) для считывания целочисленного значения.
  13. В основной функции main() создается массив указателей на строки.
  14. В основной функции main() каждая строка считывается с помощью функции getstring().
  15. В основной функции main() проверяется условие: если количество слов в строке нечетное и первый символ не равен 'A' или 'a', то начинается удаление слова.
  16. В основной функции main() происходит удаление слов в середине каждой строки.
  17. В основной функции main() выводится отформатированная строка.
  18. В основной функции main() проверяется условие: если количество слов в строке четное и первый символ не равен 'A' или 'a', то выводится строка без изменений.
  19. В основной функции main() выводится каждая строка.
  20. В основной функции main() используется функция free() для освобождения выделенной памяти.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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