1

Тема: Вправа 1-22 Керніган і Рітчі

Прихований текст

Вправа 1-22. Напишiть програму для завертання довгих рядкiв вводу у два або
бiльше коротших пiсля останнього знака, що не є пробiлом, який знаходиться перед
n-нним стовпчиком вводу. Впевнiться, що ваша програма дiє розумно з дуже довгими
рядками i у випадку браку пробiлiв i табуляцiї перед вказаним стовпчиком.

Пропоную своє рішення для того як я зрозумів цю умову.

#include <stdio.h>
#define MAXCHAR 1024
#define LIMIT 10

int getline(char array[]);
void fold(char from[], char temp[], int m);

int main(void){
    int i;
    char line[MAXCHAR];
    char temp[LIMIT+1];
    i=0;

    while((i = getline(line)) > 0){
        if(i>LIMIT){
        fold(line, temp, i);
        }
        printf("\nLine #1: %s\n", line);
        printf("\nLine #2: %s\n", temp);
        printf("\nLine #1 size: %d\n", i);
        printf("\nEND OF CYCLE\n");
    }
    return 0;
}

int getline(char a[]){
    int c, i;
    for(i = 0; i < MAXCHAR - 1 && (c=getchar()) != EOF && c != '\n'; i++){
        a[i] = c;
    }
    a[i] = '\0';
    return i;
}

void fold(char from[], char temp[], int size){
    int c, d, i, j, k;
    c = j = 0;
    d = LIMIT;

    for(i=0; i<=size; i++){
        if(i==d && c==0){
            temp[i]='\0';
            c = 1;
            d += LIMIT;    
            j = LIMIT;
            printf("%s\n", temp);
        }else if(i==d && c==1){
            temp[i]='\0';
            c = 0;
            d += LIMIT;    
            j = 0;
            printf("%s\n", temp);
        }else if(i==size && i!=d && c==0){
            temp[j] = '\0';
            printf("%s\n", temp);
        }else if(i==size && i!=d && c==1){
            while(j>0){
            j--;
            temp[j]=' ';
            }
            printf("%s\n", temp);
        }
            //direct
        if(i<d && c==0){
            temp[j] = from[i];
            j++;
        }
            //reverse
        if(i<d && c==1){
            j--;
            temp[j] = from[i];
        }
    }
}

2

Re: Вправа 1-22 Керніган і Рітчі

А можете у двох словах розтлумачити суть завдання ще раз? Бо я щось не доторопав, навіть запустивши програму...

3

Re: Вправа 1-22 Керніган і Рітчі

Я зрозумів так:
Є певний ввід, якщо його довжина перевищує ліміт - розбити його на два рядки, при чому кожний другий треба записати в зворотньому порядку.
Припустимо ліміт 2
Ввід:
12345
Вивід:
12
43
5