problem z krotkim kodem, nie poprawnie kopiuje stringi
Ostatnio zmodyfikowano 2010-08-17 22:05
dmx81 Temat założony przez niniejszego użytkownika |
problem z krotkim kodem, nie poprawnie kopiuje stringi » 2010-08-17 00:11:31 gdzie popelniam blad? zapisuje cos do stringa,polowe kopiuje do drugiego stringa, tego drugiego stringa wrzucam do wektora stringow, a kiedy wyswietlam pozniej wektor - okazuje sie, ze wszytskie stringi sa takie same, jak ostatni string, pewnie cos banalnego, ale dzis juz nie mam sily wiecej myslec... #include <iostream> #include <vector> #include <string> using namespace std; struct S { string str2; };
int main() { int t, n = 0; S * wskaznik = NULL; string str; vector < S *> wektor; cin >> t; while( t ) { wskaznik = new S; cin >> str; for( int i = 0; i < str.length() / 2; i++ ) { wskaznik->str2[ i ] = str[ i ]; } wektor.push_back( wskaznik ); cout << wektor[ n ]->str2.c_str() << endl;; t--; n++; } for( int i = 0; i < wektor.size(); i++ ) { cout << wektor[ i ]->str2.c_str() << endl; } return 0; }
|
|
malan |
» 2010-08-17 00:54:50 #include <iostream> #include <vector> #include <string> using namespace std; struct S { string str2; };
int main() { int t = 0, n = 0; S * wskaznik = 0; string str; vector < S *> wektor; cin >> t; while( t ) { wskaznik = new S; cin >> str; wskaznik->str2 = str.substr( 0, static_cast < int >( str.size() / 2 ) ); wektor.push_back( wskaznik ); cout << wektor[ n ]->str2 << endl; t--; n++; } for( int i = 0; i < wektor.size(); i++ ) { cout << wektor[ i ]->str2 << endl; } return 0; } 4 jeden je dwa d trzy tr cztery czt //Output: je d tr czt
|
|
dmx81 Temat założony przez niniejszego użytkownika |
» 2010-08-17 19:09:11 dzieki, dziala oczywiscie. czyli wniosek taki, ze do kopiowania fragmentow stringow uzywac funkcji,ktora dopisales do kodu zamiast tej petli ktora mialem wczesniej...? tylko czy mozesz wyjasnic dlaczego? tworze za kazdym razem nowy obiekt, na ktory wskazuje wskaznik, pozniej dodaje obiekt do wektora obiektow, a wskaznik bedzie wskazywal na nastepny, dla upewnienia sie dawalem cout, zeby sprawdzac, co zostalo do wektora wpisane i zawsze tam bylo to, co akurat chcialem kopiowac, a wypisujac caly wektor na koniec, wypelniaja go elementy tylko ostatnio dodanego stringa, |
|
malan |
» 2010-08-17 20:36:56 tylko czy mozesz wyjasnic dlaczego?
|
Szczerze Ci powiem, że też to zauważyłem dopiero teraz. Skompiluj sobie ten kod: #include <string> #include <iostream>
int main() { std::string foo; std::string foo2( "This is my foo." ); for( size_t i = 0; i < foo2.size(); i++ ) foo[ i ] = foo2[ i ]; std::cout << "[" << foo << "]"; return 0; }; Bum! Tylko dlaczego? Wniosek z tego taki, że... Może na przykładzie Ci pokaże: char * foo = 0; char * foo2 = new char[ 15 ]; strcpy( foo2, "This is my foo." ); for( int i = 0; i < strlen( foo2 ); i++ ) foo[ i ] = foo2[ i ];
Mam nadzieję, że zrozumiałeś moje przesłanie. Pop prostu wychodzisz poza zakres tablicy... ... jest jak foo w kodzie powyżej. Teraz spróbuj skompilować to: #include <string> #include <iostream>
int main() { std::string foo; std::string foo2( "This is my foo." ); foo.resize( foo2.size() ); for( size_t i = 0; i < foo2.size(); i++ ) foo[ i ] = foo2[ i ]; std::cout << "[" << foo << "]"; return 0; }; |
|
dmx81 Temat założony przez niniejszego użytkownika |
» 2010-08-17 22:05:33 ok, dzieki za przyklady i za poswiecony czas, znowu cos nowego weszlo do glowy:) |
|
« 1 » |