• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Usuwanie spacji - program

VPS Starter Arubacloud
0 głosów
2,280 wizyt
pytanie zadane 17 maja 2017 w C i C++ przez ChiriChiri Obywatel (1,260 p.)

Próbowałam napisać program który będzie usuwał spacje ze zdań, w założeniu chciałam napisać takie coś, że gdy program natrafi na spacje, to po prostu takjakby zgubi jedno i w forze (czyli w tekscie np la la , tekst[0]=l, tekst[2]=a tekst[3]='  ' i tak dalej, a ja chciałam po prostu przeseunąć te znaki, czyli tekst[3] równałby się l wtedy. 

Napisałam dwa programy, ale nie umiem ich dokończyć:

#include <iostream>
using namespace std;
 
int main() {
	string tekst;
	getline(cin, tekst);
	int pom=0;
	int dl = tekst.size();
	for(int i(0); i<dl; i++)
	{
		if(tekst[i]!=' ') pom++;
		tekst[i]==tekst[pom];
	}
	cout<<tekst;
	return 0;
}

 

#include <iostream>
using namespace std;
 
int main() {
	string tekst;
	getline(cin, tekst);
	int pom=0;
	int dl = tekst.size();
	for(int i(0); i<dl; i++)
	{
		while(tekst[i]==' ')
		{pom++;tekst[i]=tekst[pom];dl--;}
		if(tekst[i]!=' ') tekst[i]==tekst[i];
		pom++;
	}
	cout<<tekst;
	return 0;
}

 

komentarz 17 maja 2017 przez chucksqll Stary wyjadacz (12,930 p.)

Nie wiem czy dobrze rozumiem ale jeśli chodzi o wypisanie tekstu bez spacji to wystarczy

if (tekst[i]!=32) cout<<tekst[i];

a co do przesunięcia to analogicznie jeśli tekst[i]==32 to tekst[i]=....

 

komentarz 17 maja 2017 przez ChiriChiri Obywatel (1,260 p.)
Znaczy mi ten tekst jest potzebny potem, chodzi o to żeby go zapisać , ale teraz tak myślę , że możnaby utworzyć nowego stringa do którego by się zapisywało te znaki rózne od spacji, ale nie chcę tego robić bo nie wiem ile spacji bedzie w tekscie i o ile bedzie on krótszy od pierwszego :/
komentarz 17 maja 2017 przez Pajdas Mądrala (5,930 p.)
to zapisuj go do pliku txt

obiekt_fstream << tekst[i];

3 odpowiedzi

0 głosów
odpowiedź 17 maja 2017 przez dkarski Obywatel (1,610 p.)

Hej, ostatnio potrzebowałem sam funkcji, która usuwała mi z tekstu spację i wsadzała każdy z wyrazów osobno do tablicy. Może przyda się odpowiedź, na którą sam wpadłem szukając rozwiązania w google.

void split(vector<string> &result, string str, char delim ) {
    string tmp;
    string::iterator i;
    result.clear();

    for(i = str.begin(); i <= str.end(); ++i) {
        if((const char)*i != delim  && i != str.end()) {
            tmp += *i;
        } else {
            result.push_back(tmp);
            tmp = "";
        }
    }
}

pod zmienną delim możesz także podłączyć inny znak niż spacja

komentarz 17 maja 2017 przez 10kw10 Pasjonat (22,880 p.)

po co tak skomplikowanie ?

for(int i(0); i<dl; i++)
    {
        if(tekst[i]==' ') // mozesz tutaj dac cos innego niz spacja
            tekst.erase(i,1);
    }

 

0 głosów
odpowiedź 17 maja 2017 przez 10kw10 Pasjonat (22,880 p.)

W ten sposob jaki ty robisz musialabys przesunac wszystkie znaki po spacji, a nie tylko 1 po niej.

Lepiej uzyj .erase, ktory usunie ci spacje i przesunie.

http://www.cplusplus.com/reference/string/string/erase/

komentarz 17 maja 2017 przez ChiriChiri Obywatel (1,260 p.)
No i dlatego właśnie chciałam utworzyć nową zmienną, pom która rosłaby wraz z i w forze, a gdyby natrafiła na spacje to rosłaby o jeden, i wtedy w każdej pętli tekst[i]==tekst[pom] więc byłoby chyba to przesunięcie całego tekstu..?
komentarz 17 maja 2017 przez 10kw10 Pasjonat (22,880 p.)
rozrysuj sobie na kartce co ty chcesz zrobic, a co robi twoj algorytm.
komentarz 17 maja 2017 przez ChiriChiri Obywatel (1,260 p.)
for(int i(0); i<dl; i++)
	{
 
		if(tekst[i]!=' ') {dl--;pom++;};
		tekst[i]=tekst[pom];
		if(tekst[i]!=' ') pom--;
		pom++;
	}

Robię to na kartce, patrząc co pokolei robi kod i zatrzymałam się już na pierwszej literce, nie wiem czemu nie wyświetla a, skoro pom =0 i=0, tekst[0]=a, więc powinien wykoncać tylko dwie liniki: 

tekst[i]=tekst[pom];

pom++;

więc czemu a w ogóle nie wyświetla?

komentarz 17 maja 2017 przez 10kw10 Pasjonat (22,880 p.)
skoro [0]=a to wykona wszystkie instrukcje ;/
komentarz 17 maja 2017 przez ChiriChiri Obywatel (1,260 p.)
To  if(tekst[i]!=' ') nie znaczy  zeby operacja po nim  wykonywała się tylko wtedy gdy tekst[i] okaże się spacją? ,,,,,, pomyliłam if(tekst[i]==' ')  ,, i teraz to znaczy , prawda?
komentarz 17 maja 2017 przez 10kw10 Pasjonat (22,880 p.)
yyy ?

!= rozne od

== rowne
–1 głos
odpowiedź 17 maja 2017 przez Dani7778 Użytkownik (550 p.)

Użyj funkcji trim()

#include <algorithm> 
#include <functional> 
#include <cctype>
#include <locale>

// trim from start
static inline std::string &ltrim(std::string &s) {
    s.erase(s.begin(), std::find_if(s.begin(), s.end(),
            std::not1(std::ptr_fun<int, int>(std::isspace))));
    return s;
}

// trim from end
static inline std::string &rtrim(std::string &s) {
    s.erase(std::find_if(s.rbegin(), s.rend(),
            std::not1(std::ptr_fun<int, int>(std::isspace))).base(), s.end());
    return s;
}

// trim from both ends
static inline std::string &trim(std::string &s) {
    return ltrim(rtrim(s));
}

 

Podobne pytania

0 głosów
3 odpowiedzi 2,136 wizyt
–1 głos
2 odpowiedzi 1,068 wizyt
0 głosów
2 odpowiedzi 517 wizyt
pytanie zadane 12 stycznia 2017 w C i C++ przez Akiro Bywalec (2,910 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...