(Для меня это похоже на домашнюю работу. Имейте в виду, что учитель также имеет доступ к Stackoverflow.)
Давайте посмотрим, ваше форматирование ... прискорбно, но это не то, о чем вы просите.
Я думаю, что это будет делать то, что вам нужно.
Добавьте эти строки непосредственно перед возвратом в main:
fillLine(blank,rez,sizeof(rez));
printf("%s\n", rez);
Затем создайте функцию с именем fillLine, которая будет смотреть, что подойдет, и поместите ее в строку, если она подойдет.
/* Find the length of the next word on the line, upto the next space.
*/
int lenWord(char *in)
{
int ii;
for(ii=0; in[ii]!=0 && in[ii]!=' '; ii++);
return(ii);
}
#define MAX_COLUMNS 16
/*
* This will stuff what it can in MAX_COLUMNS columns
*/
int fillLine(char *blank, char *rez, int rezSize)
{
int in;
int out;
int col;
for(col=0, in=0, out=0; blank[in]!=0 && out<rezSize;) {
int len=lenWord(&blank[in]);
if(col+len+1 < MAX_COLUMNS ) {
int ii;
for(ii=0; ii<len; ii++) {
rez[out]=blank[in];
in++;
out++;
col++;
}
rez[out]=' ';
in++;
out++;
col++;
} else {
rez[out]='\n';
out++;
col=0;
}
}
return(out);
}
В этой версии есть несколько проблем (которые я предлагаю вам решить, прежде чем включить):
- Я передал размер области вывода
rez
функции, но не проверил ее достаточно, чтобы убедиться, что я не ухожу за пределы конца и не уничтожаю что-то еще.
- Я оставляю пробел в конце всех строк, что означает, что они не так заполнены, как могли бы.
- Функцию
fillLine
можно комбинировать с функцией blankRemove
, чтобы сделать программу более краткой.
- Некоторые люди предпочитают ставить константы слева при проверке равенства в случае опечатки:
0!=in[ii]
, а не in[ii]!=0
. Это помогает избежать потенциала для if( in[ii]=0) {
. Некоторые люди приходят в восторг от условий Йоды , как за, так и против.
Это даст вам идею. Я мог бы прокомментировать, что использование таких переменных, как ii, а не i, облегчает их поиск в текстовом редакторе.