Normalizuj praznine!

Napisati funkciju koja uklanja početne i krajnje blanko karaktere, a intervale uzastopnih blanko karaktera transformiše u jedan razmak.

Napomena: Rešiti zadatak u konstantnoj vremenskoj složenosti.

Ulaz

Sa standardnog ulaza se unosi najviše $10$ linija, od kojih svaka nije dužine veće od $100$.

Izlaz

Na standardni izlaz ispisati normalizovani prikaz svake linije.

Primer

Ulaz

    Kad na   mlado   poljsko cv’jeće   
Biser     niže ponoć   nijema,
  Kroz grudi mi   želja l’jeće:
"Što    te nema, što   te nema?"    

Kad    mi   sanak pokoj     dade
I duša    se miru       sprema,     
    Kroz srce       se glasak krade:
"Što te     nema,   što   te nema?"

        Vedri istok     kad   zarudi
U          trepetu   od alema,
I tad       duša pjesmu         budi:
"Što te nema,       što te   nema?"

    I u času        bujne sreće
  I kad tuga uzdah      sprema,
        Moja ljubav pjesmu     kreće:
            "Što te nema,        što te nema"...

Izlaz

Kad na mlado poljsko cv’jeće
Biser niže ponoć nijema,
Kroz grudi mi želja l’jeće:
"Što te nema, što te nema?"

Kad mi sanak pokoj dade
I duša se miru sprema,
Kroz srce se glasak krade:
"Što te nema, što te nema?"

Vedri istok kad zarudi
U trepetu od alema,
I tad duša pjesmu budi:
"Što te nema, što te nema?"

I u času bujne sreće
I kad tuga uzdah sprema,
Moja ljubav pjesmu kreće:
"Što te nema, što te nema"...

Rešenje

main.c

#include <stdio.h>
#include <ctype.h>
#include <string.h>

#define MAX_LENGTH 100

void normalize_blanks(char str[])
{
	int read_index = 0, write_index = 0;

	while (str[read_index] != '\0' && isblank(str[read_index])) {
		read_index++;
	}
	while (str[read_index] != '\0')
	{
		if (isblank(str[read_index]))
		{
			str[write_index++] = ' ';
			while (isblank(str[read_index]))
			{
				read_index++;
			}
		}
		else
		{
			str[write_index++] = str[read_index++];
		}
	}

	if (write_index > 0 && str[write_index - 1] == ' ')
	{
		write_index--;
	}

	str[write_index] = '\0';
}

int main(void)
{
	char str[MAX_LENGTH + 1];

	int rc;
	while((rc = scanf("%100[^\n]", str)) != EOF)
	// for reading lines better use fgets (see later lectures)
	{
		if (rc == 1) { 	// if we read something
			getchar(); 	// consume the newline character
			normalize_blanks(str);
			printf("%s\n", str);
		} else { 		// if the line is empty
			getchar(); 	// consume the newline character
			printf("\n");
		}
	}

	return 0;
}