Проверка знака пунктуации и проставление пробела за ним - C (СИ)

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

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

здрасьте. Надо ввести переменную которая проверяла бы если есть знак пунктуации то ставить пробел если нет то идти дальше.
#include <stdio.h>
#include <ctype.h>
 
int main(){
    FILE* f=fopen("1.txt", "wt");
    char txt[BUFSIZ]={'\0'}, *a=txt,buf[100];

    printf("Vvedite stroky dlya faila:\n>>");
    fgets(buf,100,stdin);
    fputs(buf,f);
    fclose(f);
 
    if((f=fopen("1.txt","rt"))==NULL)
    {printf("FILE NOT OPEN!\n"); return 0;}
 
    while(!feof(f)){
        *a=fgetc(f);
        if(ispunct(*a) && *(a+1)!=' ') *++a=' ';//возвращает ненулевое значение, если аргумент a является знаком пунктуации
        a++;
    }
    *--a='\0';
 
    fclose(f);
    freopen("2.txt", "w", f);
    fputs(txt, f);
    fclose(f);
    return 0;
}

Решение задачи: «Проверка знака пунктуации и проставление пробела за ним»

textual
Листинг программы
#include <stdbool.h>
#include <stdio.h>
 
int main()
{
    FILE* input;
    FILE* output;
 
    int c;
    bool was_punct = false;
 
    if( (input = fopen("1.txt", "r")) && (output = fopen("2.txt", "w")) ) {
        while( (c = fgetc(input)) != EOF ) {
            if( was_punct ) {
                if( c != (int)' ' && c != (int)'\n' ) fputc(' ', output);
                was_punct = false;
            } else {
                was_punct = ispunct(c);
            }
            fputc(c, output);
        }
        fclose(input);
        fclose(output);
    }
 
    return 0;
}

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

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