Napisz funkcję, która usunie wszystkie początkowe spacje...
Ostatnio zmodyfikowano 2014-06-20 10:11
Tunik Temat założony przez niniejszego użytkownika |
Napisz funkcję, która usunie wszystkie początkowe spacje... » 2014-01-04 15:36:05 Mam do napisania taki oto program: Napisz funkcję, która usunie wszystkie początkowe spacje w łańcuchu tekst, który powinien być parametrem wejściowo/wyjściowym tej funkcji. To co udało mi się zdziałać, wklejam poniżej. Problem polega na tym, że po wprowadzeniu tekstu do tablicy i wciśnięciu klawisza ENTER nic więcej się nie dzieje. Może ktoś mi powiedzieć gdzie leży problem? #include <iostream> #include <conio.h>
using namespace std;
char * f( char * tab ) { int dlugosc = 0; while( tab[ dlugosc ] != '/0' ) { dlugosc++; } int spacje = 0; while( tab[ spacje ] == ' ' ) { spacje++; } int rozm = dlugosc - spacje; char * nowatablica = new char[ rozm ]; for( int i = 0; i < rozm; i++, spacje++ ) { nowatablica[ i ] = tab[ spacje ]; } return nowatablica; }
int main() { char tab[ 100 ]; cin.get( tab, 100 ); cout << f( tab ); } |
|
pekfos |
» 2014-01-04 15:47:39 while( tab[ dlugosc ] != '/0' )
|
To nie jest poprawne. int rozm = dlugosc - spacje;
|
Musisz dodać tu 1. |
|
Tunik Temat założony przez niniejszego użytkownika |
» 2014-01-05 12:44:56 Dzięki za pomoc. Czy dodanie tej jedynki ma coś wspólnego z warunkiem z pętli while( tab[ dlugosc ] != '/0' )? |
|
pekfos |
» 2014-01-05 12:52:41 Nie. Znak zerowy to '\0', a nie '/0'. |
|
Marcin123 |
» 2014-06-16 01:07:47 int rozm = dlugosc - spacje; A dlaczego tutaj trzeba dodawać jeszcze 1? Faktycznie jak się tego nie zrobi, to całość nie działa do końca dobrze, ale nie rozumiem, dlaczego należy ją dodać. Powiedzmy mamy tekst z 20 znakami, w tym 10 spacji na początek. Czyli rozm = 20-10 = 10. Potem w pętli for, int i od 0 do 9 (i<10) i powinno działać. Mam taki kod: #include <iostream>
using namespace std;
char * spacje( char * tablica ) { int rozmiar = 0, spacje = 0; while( tablica[ rozmiar ] != '\0' ) rozmiar++; cout << rozmiar << endl; while( tablica[ spacje ] == ' ' ) spacje++; cout << spacje << endl; int x = spacje; int rozm = rozmiar - spacje; cout << rozm << endl; char * nowatab = new char[ rozm ]; for( int i = 0; i < rozm; i++, x++ ) nowatab[ i ] = tablica[ x ]; return nowatab; }
int main() { char tab[] = " 1234567890"; cout << endl << spacje( tab ); system( "pause" ); } Dla pewności pojawia się na bieżąco ile wynoszą dane zmienne i zgadza się - rozmiar=20, spacje=10, rozm=10, więc powinno na moje oko działać, ale póki się jedynki tam nie doda, to nie działa to w 100% poprawnie(na końcu tablicy pojawiają się jakieś krzaczki). Może mi ktoś to wyjaśnić? |
|
pekfos |
» 2014-06-20 10:11:34 Nie liczysz zera na końcu. |
|
« 1 » |