[C++] Napisy w strutkturach, funkcje.
Ostatnio zmodyfikowano 2016-01-17 17:51
mateczek |
» 2016-01-17 13:01:05 https://www.youtube.com/watch?v=L9JvSHYLvuwchar * nazwisko_slubne = new char[ strlen( c1.nazwisko ) + strlen( c2.nazwisko ) + 1 ];
skoro napis ma rozmiar 15 to ostatnim znakiem jest napis[14]. Znakiem napis[15] jest znak '/0'. Kopiując coś do znaku napis[strlen( c1.nazwisko ) + 1;] zostwiasz '/0' i z kopiowania nici :) |
|
Kordian Temat założony przez niniejszego użytkownika |
» 2016-01-17 15:53:33 Nie mogę pisać w stringach, mam narzucone z góry chary. Rozmiar tablicy charów + 1 nie uwzględnia myślnika '-' między nazwiskami, zatem powinno być +2. Kopiując coś do znaku napis[strlen( c1.nazwisko ) + 1;] zostwiasz '/0' i z kopiowania nici :)
|
Mógłbyś objaśnić? Nie wiem, o co Ci chodzi. |
|
mateczek |
» 2016-01-17 16:09:09 i = strlen( c1.nazwisko ) + 1; for( i; i < strlen( c1.nazwisko ) + strlen( c2.nazwisko ) + 2; i++ ) { nazwisko_slubne[ i ] = c2.nazwisko[ j ]; j++; }
nazwisko "kot" rozmiar ma 3 i w pamięci komputera wygląda tak: 'k','o','t','/0' zmienna "i" początkowe = 3+1=4; nazwisko_sl[ 0 ] = 'k' nazwisko_sl[ 1 ] = 'o' nazwisko_sl[ 2 ] = 't' nazwisko_sl[ 3 ] = '/0' nazwisko_sl[ 4 ] = '-'
zgaduje, że wynik kopiowania nie przynosi rezultatów?? dalej nazwisko_slubne jest równe c1.nazwisko ?? dobrze myślę ?? |
|
Kordian Temat założony przez niniejszego użytkownika |
» 2016-01-17 16:57:28 Kopiowanie chyba działa, ale czytam dane z poza tablicy. Zgadzm się z Tobą co do kota, ale tutaj sytuacja wygląda inaczej: jesli osoba ma przyjąć podwójne nazwisko, np: Kowalska-Pająk to mamy rozmiar pierwszego nazwiska (Kowalska=8), rozmiar drugiego(Pająk=5), bajt zerowy oznaczający koniec napisu i jeszcze jedno miejsce na '/-' czyli +2. |
|
mateczek |
» 2016-01-17 17:51:41 musisz zastąpić 0 myślnikiem i dodać 0 na końcu !!!! jak chcesz taką metodą !!! #include<iostream> #include<cstring> using namespace std;
struct czlowiek { char * imie = NULL; char * nazwisko = NULL; ~czlowiek() { } };
czlowiek uzupelnij( char * imie, char * nazwisko ) { czlowiek c; c.imie = new char[ strlen( imie ) + 1 ]; c.nazwisko = new char[ strlen( nazwisko ) + 1 ]; strcpy( c.imie, imie ); strcpy( c.nazwisko, nazwisko ); return c; }
void slub( czlowiek & c1, czlowiek & c2 ) { int roz = strlen( c1.imie ); if(( c1.imie[ roz - 1 ] ) == 'a' ) { char * wsk = new char[ strlen( c2.nazwisko ) + strlen( c1.nazwisko ) + 2 ]; strcpy( wsk, c1.nazwisko ); int i = strlen( c1.nazwisko ); int j = 0; wsk[ i ] = '-'; i++; for( int j = 0; j < strlen( c2.nazwisko ); j++ ) { wsk[ i ] = c2.nazwisko[ j ]; i++; } wsk[ i ] = '\0'; delete[] c1.nazwisko; c1.nazwisko = wsk; } } int main() { czlowiek c1 = uzupelnij( "Anna", "Kowalska" ); czlowiek c2 = uzupelnij( "Jan", "Bracki" ); slub( c1, c2 ); cout << c1.imie << " " << c1.nazwisko << endl; delete[] c1.imie; delete[] c2.imie; delete[] c1.nazwisko; delete[] c2.nazwisko; return 0; } |
|
1 « 2 » |