Program w C usuwający dodatkowe spacje

0

Mam pytanie - chciałam napisać program usuwający dodatkowe spacje z tekstu. Nie działa tak, jak powinien - wydaje mi się, że błąd robię gdzieś przy przypisywaniu w pętli. Program ma działać w oparciu o funkcje getchar() i putchar(). Ktoś może pomóc?
#include <iostream>

int main()
{
char tekst; // wprowadzony tekst
int n = 0; // ilość spacji
printf("Wpisz tekst: ");
while ((tekst = getchar()) != EOF)
{
while (n > 0 && n < 999)

		if ( tekst == n*32) // 32 - kod ASCII spacji
			tekst = 32;
		
	putchar(tekst);
}


return 0;

}

5

Czemu mnożysz index n przez 32?

1

tekst == n*32 nie wiem co to ma być ale wielokrotność spacji to nie będzie.
Nie wiem też czym są „dodatkowe” spacje, ale jeśli z wielu następujących po sobie spacji ma się robić jedna - zapamiętuj np. poprzedni znak i odpowiednio porównuj.

5

C nie znam więc napisałem w Pseudo-C:

char c;
bool wasSpace = false;
while ((c = getchar()) != EOF) {
    bool isSpace = c == ' ';
    if (!isSpace || !wasSpace) {
      putchar(c);
    }
    wasSpace = isSpace;
}
2

Ten kod nie robi to co powinien. ba nawet nie przypomina kodu, który miały usuwać spacje.

#include <iostream>

int main()
{
	char tekst; // to jest znak nie tekst!
	int n = 0; // ilość spacji - po co?
	printf("Wpisz tekst: "); // po co to?
	while ((tekst = getchar()) != EOF)
	{
		while (n > 0 && n < 999) ta pętla jest zupełnie bezsensu!
			if ( tekst == n*32) // 32 - kod ASCII spacji // jakie jest uzasadnienie mnożenia?
				tekst = 32;
			
		putchar(tekst);
	}
	
	return 0;
}
2
#include <cctype>
#include <string>
#include <sstream>
#include <iostream>
using namespace std;

void xtrim(istream &sin,ostream &sout)
{
	bool spneed=false,has=false;
	for(int ch;(ch=sin.get())!=EOF;)
	{
		if(isspace(ch)) spneed=true;
		else
		{
			if(spneed&&has) sout.put(' ');
			spneed=false;
			has=true;
			sout.put(ch);
		}
	}
}

int main()
{
	istringstream sin("  ala   ma    kota  ");
	ostringstream sout;
	xtrim(sin,sout);
	cout<<"\""<<sout.str()<<"\""<<endl;
	return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1