• 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

Object Storage Arubacloud
–1 głos
1,088 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,860 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,147 wizyt
0 głosów
3 odpowiedzi 2,335 wizyt
pytanie zadane 17 maja 2017 w C i C++ przez ChiriChiri Obywatel (1,260 p.)
0 głosów
2 odpowiedzi 547 wizyt
pytanie zadane 12 stycznia 2017 w C i C++ przez Akiro Bywalec (2,910 p.)

92,556 zapytań

141,404 odpowiedzi

319,563 komentarzy

61,942 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...