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

[C++]Problem z wykrywaniem znaku

Ostatnio zmodyfikowano 2014-06-26 21:05
Autor Wiadomość
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:

C/C++
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ś:
C/C++
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.
P-112798
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?
P-112799
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
P-112803
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.
P-112804
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.

C/C++
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 ];
    }
}
P-112808
pekfos
» 2014-06-26 20:47:52
Nic dziwnego, pełno błędów. To co ty w końcu próbujesz osiągnąć..?
P-112816
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.

C/C++
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.
P-112818
« 1 »
  Strona 1 z 1