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

Usuwanie początkowych oraz końcowych spacji

VPS Starter Arubacloud
–1 głos
1,069 wizyt
pytanie zadane 14 stycznia 2017 w C i C++ przez Akiro Bywalec (2,910 p.)
#include <cstdlib>
#include <iostream>

using namespace std;
int main()
{
    int i;
    char tekst[100];

    cout<<"Podaj wyraz, ktory ma maksymalnie 99 znakow: "<<endl;
    cin.getline(tekst,100);
    cout << "Wyraz przed usunieciem spacji:" << endl;
    cout << "->" << tekst << "<-" << endl;
    cout << endl;

    while(tekst[0]==' ')
    {
        i=0;
            for(int k=1; k<100; k++)
                {
                    tekst[i]=tekst[k];
                    i++;
                }
    }

    i=0;

    while(tekst[i]!=0)
    {
        i++;
    }

    cout << "Tekst ma: " << i << "znakow" << endl;

    while(tekst[i]==' ')
    {
       tekst[i-1]=0;
       i--;
    }

    cout<<"->"<<tekst<<"<-"<<endl;



    return 0;

}

Problem jest następujący. Program nie usuwa końcowych spacji, wszystko zaczyna się chyba od tego, że źle liczy wszystkie wprowadzone znaki, więc fragment z tym kodem musi być błędny: 

 while(tekst[i]!=0)
    {
        i++;
    }

    cout << "Tekst ma: " << i << "znakow" << endl;

Proszę o jakieś wskazówki co może tutaj nie grać :) 

2 odpowiedzi

0 głosów
odpowiedź 14 stycznia 2017 przez timrh Mądrala (6,030 p.)

Możesz zrobić to na stringu, a potem pobrać jego długość przez length(), i w zależności od napotkanego znaku, dodawać te znaki do innej zmiennej
 

string tekst;
cin >> tekst;
string tekstBezSpacji;

for(int i=0; i<telst.length(); i++)
 if(tekst[i] != ' ')
  tekstBezSpacji += tekst[i];

 

komentarz 14 stycznia 2017 przez Akiro Bywalec (2,910 p.)
Nie mogę korzystać ze stringów, takie warunki zadania :)
komentarz 14 stycznia 2017 przez adrian17 Ekspert (344,100 p.)
To tak jak powiedzieć "nie mogę korzystać z C++a", ale OK.
komentarz 14 stycznia 2017 przez timrh Mądrala (6,030 p.)
Program dobrze liczy znaki, ale źle usuwa spacje.
komentarz 14 stycznia 2017 przez timrh Mądrala (6,030 p.)

Zobacz to:

#include <cstdlib>
#include <iostream>

using namespace std;
int main()
{
	int i = 0;
	char tekst[100] = "532432   ";

	while (tekst[i] != 0)
	{
		i++;
	}

	cout << "Tekst ma: " << i << " znakow" << endl;

	char tekst2[100];

	int j = 0;
	for (int a = 0; a < 100; a++)
	{
		if (a < i && tekst[a] != ' ')
		{
			tekst2[j] = tekst[a];
			j++;
		}
		else
			tekst2[a] = NULL;
	}

	cout << "Tekst bez spacji ma: " << j << " znakow" << endl;
	cout << tekst2 << endl;

	cin.get();
	return 0;
}

 

–1 głos
odpowiedź 14 stycznia 2017 przez 10kw10 Pasjonat (22,880 p.)
edycja 14 stycznia 2017 przez 10kw10

Drugi raz to samo ci pisze ;/

while(tekst[i]==' ')
    {
       tekst[i-1]=0;
       i--;
    }

powinno byc

while(tekst[i-1]==' ')
    {
       tekst[i-1]=0;
       i--;
    }
komentarz 14 stycznia 2017 przez Akiro Bywalec (2,910 p.)
No tak, niezmieniłem w definicji ten pętli i stąd całe zamieszanie :)

 

A napisał byś mi jak przekazać taką tablice tekstową do funkcji i zwrócić później jakąś inną tablice ze znakami?

Szukałem w paru miejscach i niestety nie znalazłem skutecznych sposobów.
komentarz 14 stycznia 2017 przez 10kw10 Pasjonat (22,880 p.)

Przekazac mozesz jak kazdy inny argument

// naglowek
void funkcja(char tablica[]);

//wywolanie
funkcja(tablica);

Z tego co wiem, nie da sie zwrocic tablicy, ale mozesz przekazac druga i ja uzupelnic.

komentarz 14 stycznia 2017 przez Akiro Bywalec (2,910 p.)
Zrobiłem tak samemu i to przez przypadek - metodą prób i błędów :)

W każdym razie dzięki za odpowiedź, zadanie rozwiązane.

Podobne pytania

0 głosów
3 odpowiedzi 2,137 wizyt
0 głosów
3 odpowiedzi 2,283 wizyt
pytanie zadane 17 maja 2017 w C i C++ przez ChiriChiri Obywatel (1,260 p.)
0 głosów
2 odpowiedzi 519 wizyt
pytanie zadane 12 stycznia 2017 w C i C++ przez Akiro Bywalec (2,910 p.)

92,455 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 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!

...