Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Napisz funkcję, która usunie wszystkie początkowe spacje...

Ostatnio zmodyfikowano 2014-06-20 10:11
Autor Wiadomość
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?


C/C++
#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 );
}
P-101108
pekfos
» 2014-01-04 15:47:39
C/C++
while( tab[ dlugosc ] != '/0' )
To nie jest poprawne.

C/C++
int rozm = dlugosc - spacje;
Musisz dodać tu 1.
P-101110
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' )?
P-101211
pekfos
» 2014-01-05 12:52:41
Nie. Znak zerowy to '\0', a nie '/0'.
P-101213
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:

C/C++
#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ć?
P-112145
pekfos
» 2014-06-20 10:11:34
Nie liczysz zera na końcu.
P-112360
« 1 »
  Strona 1 z 1