Как сделать выделение нужных символов в предложение на Си?

Скринскрин2 Требуется написать программу, которая:

  • выводит текст на экран дисплея;
  • определяет в каждом предложении текста количество символов, отличных от букв и пробела;
  • по нажатию произвольной клавиши поочередно выделяет каждое предложение текста, а в выделенном предложении - поочередно все символы, отличные от букв и пробела.

Не получается сделать выделение символов по нажатию клавиши, все остальное работает.

Программа по нажатию произвольной клавиши выделяет поочередно предложения в тексте, потом выделяет символы, отличные от пробела и букв, но ставит их в конце предложения, а нужно чтобы выделяла в самом предложении тоже по нажатию любой клавиши поочередно.


#include <stdio.h>
#include <ctype.h>
#include <conio.h>
#include <windows.h>
#define MAX_LEN 1000
void clrscr();
void SetStandartScreen();
void SetTextBackground(int TextColor, int BackgroundColor);
void SearchSentence2(char *text, int from, int *begin, int *end);
void PrintNormal(char *text, int begin, int end);
void PrintColor(char *text, int begin, int end);
void PrintColorSym(char *text, int begin, int end);
int CountNonLetterSymbols(char *text, int begin, int end);


enum ConsoleColor 
{
    Black = 0,
    Blue = 1,
    Green = 2,
    Cyan = 3,
    Red = 4,
    Magenta = 5,
    Brown = 6,
    LightGray = 7,
    DarkGray = 8,
    LightBlue = 9,
    LightGreen = 10,
    LightCyan = 11,
    LightRed = 12,
    LightMagenta = 13,
    Yellow = 14,
    White = 15 
};


void main(void) {
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    
    int begin, end, from, symbolCount;
    char text[MAX_LEN], filename[100];

    printf("Ââåäèòå èìÿ ôàéëà ñ äàííûìè: ");
    scanf("%s", filename);

    FILE *file = fopen(filename, "r");
    if (file == NULL) {
        printf("Îøèáêà ïðè îòêðûòèè ôàéëà.\n");
    }

    fgets(text, MAX_LEN, file);
    fclose(file);

    from = 0;
    begin = 0;

    while (begin >= 0) {
        SearchSentence2(text, from, &begin, &end);
        int i = begin;
        clrscr();

        if (begin >= 0) {
            PrintNormal(text, 0, begin - 1);
            PrintColor(text, begin, end);
            PrintColorSym(text, begin, end);
            symbolCount = CountNonLetterSymbols(text, begin, end);
            printf(" (%d)", symbolCount);
            PrintNormal(text, end + 1, strlen(text) - 1); 
            from = end + 1;
            getch();
        }
    }    
};

void clrscr() 
{
    system("cls");
    return;
};

void SetStandartScreen() 
{
    system("color 0F"); 
}; 

void SetTextBackground(int TextColor, int BackgroundColor) 
{
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(hConsole, (WORD) ((BackgroundColor << 4) | TextColor));
    return;
};


    
void SearchSentence2(char *text, int from, int *begin, int *end) {
    int i, j, len;
    len = strlen(text);

    if (from < len) {
        i = from;
        // Ïðîïóñê íå áóêâ â íà÷àëå
        while (i < len && !isalpha(text[i])) {
            i++;
        }
        if (i == len) {
            *begin = -1;
        } else {
            *begin = i;
            *end = i;
        }

        while (i < len) {
            if (text[i] == '!' || text[i] == '?') {
                *end = i;
                return;
            } else if (text[i] == '.') {
                *end = i;
                j = i + 1;
                while (j < len && !isalpha(text[j])) {
                    j++;
                }
                if (j < len && islower(text[j])) { 
                    i = j; 
                    continue; 
                } else {
                    return; 
                }
            }
            i++;
        }        
    } else {
        *begin = -1;
    }
}

void PrintNormal(char *text, int begin, int end) {
    SetTextBackground(White, Black);
    for (int i = begin; i <= end; i++) {
        putch(text[i]);
    }
}



int CountNonLetterSymbols(char *text, int begin, int end) {
    int count = 0;
    for (int i = begin; i <= end; i++) {
        if (!isspace(text[i]) && !isalpha(text[i])) {
            count++;
        }
    }
    return count;
}


void PrintColor(char *text, int begin, int end)
{
    int i;
    SetTextBackground(Black, LightGray);
    for(i=begin; i<=end; i++)
     putch(*(text+i));
    SetTextBackground(White, Black);
    return;
};


void PrintColorSym(char *text, int begin, int end)
{
    int i;
    SetTextBackground(Black, LightGray);
    for(i=begin; i<=end; i++)
    {   if (!(isspace(text[i])) && !(isalpha(text[i]))) {
            SetTextBackground(Black, LightRed);
            putch(*(text+i));
    }
    
    
}
     
    SetTextBackground(White, Black);
    return;
};

Ответы (0 шт):