[C++]Problem z wykrywaniem znaku
Ostatnio zmodyfikowano 2014-06-26 21:05
GGG205 Temat założony przez niniejszego użytkownika |
[C++]Problem z wykrywaniem znaku » 2014-06-26 19:52:47 Cześć! Robię wczytywanie tekstu i z niego później chcę usunąć spacje. Wygląda to tak: string linia; plik >> linia;
while( !plik.eof() ) { int posInLine = linia.find( ' ' ); getline( plik, linia ); do { posInLine = linia.find( ' ', posInLine + 1 ); cout << posInLine << endl; } while( posInLine != string::npos ); } Zadanie jest proste: 1.Wczytanie pierwszej linijki. -Pętla- 2.Znalezienie spacji. 3.Przejście do kolejnej linijki. 4.Szukanie wszystkich spacji. 5.Wrócenie na początek pętli. Chciałem zrobić wyzerowanie zmiennej posInLine, ale nie to nic nie zmieni. Próbowałem takie coś: string linia; plik >> linia; int posInLine = 0; while( !plik.eof() ) { posInLine = 0; posInLine = linia.find( ' ' ); getline( plik, linia ); do { posInLine = linia.find( ' ', posInLine + 1 ); cout << posInLine << endl; } while( posInLine != string::npos ); } Jeżeli uda się to rozwiązać to rozwiąże się i kolejny problem z erase. Ponieważ w ostatniej linijce linia.find zwraca -1 co powoduje błąd dla erase. |
|
pekfos |
» 2014-06-26 19:57:43 Jeżeli uda się to rozwiązać |
Co rozwiązać..? w ostatniej linijce linia.find zwraca -1 co powoduje błąd dla erase. | if? |
|
GGG205 Temat założony przez niniejszego użytkownika |
» 2014-06-26 20:07:40 1. Problem z wyszukiwaniem spacji w prawidłowy sposób. 2.Teraz nie jest potrzebny. Wynik po kompilacji: 0 2 4 6 8 -1 1 3 5 7 9 -1 3 5 7 9 -1 3 5 7 9 -1
Każda kolejna liczba po -1 to nowa linija. Plik wygląda mniej więcej tak: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 |
|
pekfos |
» 2014-06-26 20:13:02 1. Problem z wyszukiwaniem spacji w prawidłowy sposób. |
Jeśli szukasz spacji tylko po to, by je usunąć, to używanie find() itp to utrudnianie sobie życia. |
|
GGG205 Temat założony przez niniejszego użytkownika |
» 2014-06-26 20:24:35 Próbowałem coś takiego, ale też nie działa. Unhandled exception at 0x55662258 (msvcp100d.dll) in Tester.exe: 0xC0000005: Access violation writing location 0xfdfdfe29. string linia; int x = 0; int y = 0; int ** lvl;
while( !plik.eof() ) { getline( plik, linia ); y++; } x = linia.length();
lvl = new int *[ y ]; for( int i = 0; i < y; i++ ) lvl[ i ] = new int[ x ];
plik.close(); plik.open( "mapa.txt" );
for( int i = 0; i < y; i++ ) { for( int j = 0; j < x; j++ ) { plik >> lvl[ y ][ x ]; } } |
|
pekfos |
» 2014-06-26 20:47:52 Nic dziwnego, pełno błędów. To co ty w końcu próbujesz osiągnąć..? |
|
GGG205 Temat założony przez niniejszego użytkownika |
» 2014-06-26 21:05:07 Teraz to jest inny problem, a więc chcę wczytać dane do tablicy dynamicznej. 1.Sprawdzanie ilości znaków i linijek. 2.Utworzenie tablicy. 3.Wczytanie danych do tablicy. ---------------------------------------- @Edit Dobra działa. string linia; int x, y; int ** lvl;
plik >> x >> y; lvl = new int *[ y ];
for( int i = 0; i < y; i++ ) lvl[ i ] = new int[ x ];
for( int i = 0; i < y; i++ ) { for( int j = 0; j < x; j++ ) { plik >> lvl[ i ][ j ]; } }
for( int i = 0; i < y; i++ ) { for( int j = 0; j < x; j++ ) { cout << lvl[ i ][ j ]; } cout << endl; } Aby tak się nie trudzić ze zliczaniem znaków i linijek to w mapie na pierwszej linijce umieściłem dane o szerokości i wysokości mapy. Reszta już sama leciała bez problemu. |
|
« 1 » |