Вам нужно сканировать заранее, читая каждое слово и вычисляя его длину, прежде чем вывести что-либо.Вы можете сделать это, скопировав слово во временный буфер, или вы можете использовать указатели, чтобы сделать это при сканировании.
Использовать буфер просто, но вы не знаете, каков размер буфера для выделенияэто имеет внутренние ограничения.
Версия указателя может быть сделана как простой конечный автомат с двумя состояниями, BETWEEN_WORDS и IN_WORD.Все интересное происходит только при переходах между состояниями;сканирование слов или пробелов просто для чтения.
Псевдокод:
initial state = BETWEEN_WORDS
start_of_word_ptr = null
for each character,
if whitespace, then
if the current state is IN_WORD, then
the new state is BETWEEN_WORDS
word_length = current_pos - start_of_word_pos
if current_line_length + word_length + 1 > max_line_length, then
/* start a new line */
print linefeed
current_line_length = 0
else
/* output space */
print a space between words
current_line_length++
else if not whitespace, then
if the current state is BETWEEN_WORDS, then
the new state is IN_WORD
start_of_word_ptr = current_ptr
/* output word */
print the characters from start_of_word_pos to current_pos
current_line_length += word_length
Это базовый алгоритм, который будет делать то, что вы хотите для ввода строки.Настроить по вкусу.