Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- # define STEP 2
- # define STOP "Dragon flew away!"
- # define TAB 33 // номер в таблице ASCII, после которого не идут символы табуляции
- // проверка на конец предложения
- int sent_end(char sym) {
- if (sym == '.' || sym == ';' || sym == '?' || sym == '!')
- return 0;
- return 1;
- }
- // проверка на конец текста
- int text_end(char *sent) {
- char *stop = STOP;
- if (strcmp(stop, sent) == 0) {
- return 1;
- }
- return 0;
- }
- // считывание предложения
- char *get_sent() {
- int i = 0;
- int size = STEP * sizeof(char);
- char *sent = malloc(size);
- char sym;
- int flag = 0; // табуляция в начале предложения(буквы ещё не встретились)
- do {
- sym = getchar();
- if (flag == 0 && sym >= TAB) {
- flag = 1;
- }
- if (flag == 1) {
- sent[i] = sym;
- i++;
- size += STEP * sizeof(char);
- sent = realloc(sent, size);
- }
- } while (sent_end(sym));
- sent[i] = '\0';
- return sent;
- }
- // запись в память текста
- char **get_text() {
- int size = STEP * sizeof(char *);
- char **text = malloc(size);
- char *sentence;
- int i = 0;
- do {
- sentence = get_sent();
- text[i] = sentence;
- i++;
- size += STEP * sizeof(char *);
- text = realloc(text, size);
- } while (text_end(sentence) == 0);
- return text;
- }
- // определение длины предложения
- int text_len(char **text) {
- int len = 0;
- while (text_end(text[len]) == 0)
- len++;
- len++;
- return len;
- }
- // вывод последнего предложения
- void summary(int m, int n) {
- printf("Количество предложений до %d и количество предложений после %d", n, n - m);
- }
- int main() {
- char **text = get_text();
- int i = 0, m = 0;
- char *fr;
- // выводим текст
- while (text_end(text[i]) == 0) {
- unsigned long last = strlen(text[i]) - 1;
- if (text[i][last] != '?')
- printf("%s\n", text[i]);
- else
- m++;
- i++;
- }
- printf("%s\n", text[i]);
- int n = text_len(text) - 1;
- summary(m, n);
- // очищаем память
- for (int i = 0; i <= n; i++)
- free(text[i]);
- free(text);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement