AD 1
string wzór nie jest wczytywany funkcją getline, ale "normalnie" cin >> wzór.
Taki sposób wczytywania sam się "broni" przed wczytaniem wszelkich białych znaków, także '\n', więc nie potrzeba wcześniej wczytywać czy to pozostawionego znaku końca linii ['\n'] czy dowolnych dodatkowych spacji - jeżeli by się tam jakieś przypadkowo pojawiły.
AD 2
To był tylko przykład - jedna możliwość, wykorzystanie instrukcji continue.
Inna to NP.:
if (zdanie[i] == ' ')
cout << ' ';
else {
......
PS
Natomiast poniższa linia jest już niezbędna:
getline(cin, test);
ale powinieneś napisać [dla siebie] komentarz, po co ona jest.
np //usuwam '\n' znak końca linii
Zamiast tych dwóch linii, możesz też użyć dwa razy:
getline(cin,zdanie); // tu tylko usuwam-wczytuje '\n'
getline(cin,zdanie);
Moim zdaniem, jeszcze lepiej:
do
getline(cin, zdanie);
while (zdanie.length() < 1); // zadziała gdy nie będzie dodatkowych spacji+ '\n'
Dlaczego to jest [moim zdaniem] lepiej? Bo ta wersja też wczytuje dwa razy zdanie, ale dodatkowo ten fragment jest samodokumentujący się - wiadomo o co tu chodzi, bez dodatkowych komentarzy, prawda?
PS 2
Nie rozumiem, czemu po zakomentowaniu=usunięciu getchar() nie dostałeś AC, może pozmieniałeś coś więcej, ale to nie ważne, ważne, że masz AC 