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

Problem z przepisywaniem tablic.

Ostatnio zmodyfikowano 2012-10-11 00:30
Autor Wiadomość
Razor
Temat założony przez niniejszego użytkownika
Problem z przepisywaniem tablic.
» 2012-10-10 21:01:54
Mam zadanie w którym posiadam 2 tablice char, o tej samej długości , Zadaniem jest przekopiwać co drugą literę z pierwszej tablicy do drugiej, np gdy mamy napis "instytut" to w drugiej tablicy ma powstać "isyu".Wpadłem na taki pomysł :

C/C++
#include<iostream>
using namespace std;

void przypisanie( char t[], char t2[] );


int main()
{
    char tabl[ 8 ] = { "Szkolaa" };
    char tabl2[ 8 ];
    cout << tabl << endl;
    cout << tabl2 << endl;
    przypisanie( tabl, tabl2 );
    cout << tabl << endl;
    cout << tabl2 << endl;
}


void przypisanie( char t[], char t2[] )
{
    int i = 0;
    int a = 0;
    do
    {
        t2[ i ] = t[ a ];
        i++;
        a + 2;
    } while( t[ a ] == t2[ i ] );
   
}

Niestety , zamiast wyjść mi "Skla" , to wyskakuje "S3A".Proszę was o pomoc i wyjaśnienie błedu.[/i]
P-66590
cyklopek11
» 2012-10-10 21:53:51
C/C++
#include<iostream>
using namespace std;

void przypisanie( char t[], char t2[], int size );


int main()
{
    char tabl[ 8 ] = { "Szkolaa" };
    char tabl2[ 8 ] = { '\0' }; // wyzeruj tablice (wystarczy tylko jeden null, pozostałe komórki też będą wypełnione nullami), przed wyzerowaniem w lokalnej tablicy są śmieci więc nie ma sensu odczytywać jej
    cout << tabl << endl;
    cout << tabl2 << endl;
    przypisanie( tabl, tabl2, 8 );
    cout << tabl << endl;
    cout << tabl2 << endl;
}
//funkcja na szybko, w dalszym kodowaniu popraw definicję funkcji aby działało jednakowo dla rozmiaru parzystego i nieparzystego tzn. żeby końcowy null był kopiowany (chyba że dana tablica nie ma stanowić C-stringu tylko być luźną tablicą char-ów). Jeśli będziesz zerował tablicę docelową tak jak wcześniej pokazałem pomiń powyższą dygresję :-)

void przypisanie( char t[], char t2[], int rozmiar ) // dla bezpieczeństwa warto do funkcji przesyłać rozmiar tablicy znaków (dobra praktyka programistyczna)
{
    for( int i = 0, a = 0; i < rozmiar; i++ )
    {
        if(( i % 2 ) == 0 ) // sprawdź czy reszta z dzielenia jest zerem (czyli czy parzyste)
        {
            t2[ a ] = t[ i ]; // jeśli tak przypisz
            a++; // tylko wtedy zwiększ o jeden indeks tablicy docelowej
        }
       
    }
   
}
P-66596
crash
» 2012-10-11 00:30:28
Jeszcze mała sugestia. Skoro druga tablica ma mieć tylko połowę znaków pierwszej, to jej rozmiar powinien być o połowę...
P-66613
« 1 »
  Strona 1 z 1