Napisz program, który dodaje lub usuwa białe znaki, aby ładnie sformatować kod. Reguły dotyczące tego, jak powinien wyglądać kod po zakończeniu:
- Żadna linia nie powinna zawierać więcej niż jednego z
{
i}
. {
Powinny zawsze być ostatnią rzeczą, na linii.}
Powinny zawsze być tylko rzeczą na linii (oprócz spacji, że jest przed nim).- Ilość białych znaków przed każdą linią powinna być stałą wielokrotnością bieżącej liczby zagnieżdżeń. (Możesz użyć dowolnej wcięcia, o ile się nie zmienia).
- Nie należy wstawiać ani usuwać białych znaków, które nie przyczyniają się do spełnienia jednej z tych zasad.
Liczba zagnieżdżeń w pierwszym wierszu wynosi 0. Liczba zagnieżdżeń w każdej innej linii to liczba zagnieżdżeń poprzedniej linii, plus jeden, jeśli poprzednia linia zawiera a {
, minus jeden, jeśli bieżąca linia zawiera a }
.
{
a }
wewnątrz literałów ciągowych i komentarzy nie liczą się powyższe reguły. Dosłowny ciąg znaków to tekst zawarty w pojedynczych lub podwójnych cudzysłowach, przy czym pojedyncze lub podwójne cudzysłowy z nieparzystą liczbą odwrotnych ukośników bezpośrednio przed nimi nie są interpretowane jako koniec literału ciągowego. Komentarz to tekst zawarty w /*
i */
lub tekst przechodzący od //
końca linii. W linii wielu znaczników początku komentarza liczy się tylko pierwszy. Komentarze nie są analizowane wewnątrz literałów łańcuchowych.
Przykłady
main() {printf("Hello!"); // I don't care about the world...
}
becomes:
main() {
printf("Hello!"); // I don't care about the world...
}
int main(){
puts("a");
puts("b");
}
becomes:
int main(){
puts("a");
puts("b");
}
main()
{ printf("{"); /* }
} */
printf("}//}"); ///*
}
becomes:
main()
{
printf("{"); /* }
} */
printf("}//}"); ///*
}
int test[] = {1, 2, 3};
becomes:
int test[] = {
1, 2, 3
}
;