#include #include #include void PrintLine(char *tab, int k1, int k2, int sc, int *ip, char par); int main(int argc, char *argv[]) { //Kolumna 1 i 2 do ktorych wyrownujemy int k1,k2; char *tab; k1 = atoi(argv[1]); k2 = atoi(argv[2]); int cc = k2-k1+1; int i = 0; int sc; char c; tab = malloc(cc+4); do{ sc = 0; for(; i < cc; i++) { c = getc(stdin); if(c == ' ') sc++; if(c == -1) break; tab[i] = c; } PrintLine(tab,k1,k2,sc,&i,i % 2); // i = 0; }while(!feof(stdin)); free(tab); return 0; } void PrintLine(char *tab, int k1, int k2, int sc, int *ip,char par) { //printf("TAB: %s||\n",tab); int cc = k2-k1+1; int i,j,k,sbw,sbw2,sbw3; int spaces_written = 0; char *lasts = strrchr(tab,' '); int spaces_total = cc-((lasts-tab)-sc); if(sc > 0) { sbw = spaces_total/sc; sbw3 = sbw2 = spaces_total%sc; } else sbw = sbw2 = sbw3 = 0; // printf("%d",*ip); // printf("l-t: %d sc: %d sbw: %d sbw2: %d cc: %d spaces_total: %d\n",lasts-tab,sc,sbw,sbw2,cc,spaces_total); for(i = 0; i < k1; i++) putc(' ',stdout); for(i = 0, k = 0; k < *ip; i++) { if(tab[i] != ' ') { putc(tab[i],stdout); k++; } else { for(j = 0; j < sbw; j++,k++) putc(' ',stdout); if(par) { if(sbw2 > 0) { putc(' ',stdout); sbw2--; k++; } } else { if(sbw2 > 0 && spaces_written >= sc-sbw3) { putc(' ',stdout); sbw2--; k++; } } spaces_written++; } } putc('\n',stdout); //skopiowanie pozostalosci while(tab[i] == ' ') i++; memcpy(tab,&tab[i],cc-i); *ip = cc-i; }