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
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;
}