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

Iterator stringu ( porównanie )

Ostatnio zmodyfikowano 2011-05-10 19:58
Autor Wiadomość
Mrowqa
Temat założony przez niniejszego użytkownika
Iterator stringu ( porównanie )
» 2011-05-10 19:22:57
Witam!

Mam pytanie odnośnie iteratora do stringu:
Otóż chcę sprawdzić, czy nie wyszedł spoza stringu (
it_obj >= str_obj.end()
 ) tylko, że to nie chce działać ... Jest jakiś inny sposób sprawdzenia ( o ile powyższy jest błędny :D ). Taka interpretacja co do tego powyżej - skoro nie wolno tak porównywać ( chyba, że mam gdzieś błąd w kodzie ) to czy dozwolone jest to niżej:
C/C++
it_obj = it_obj2 + 3; // przypisanie do it_obj pozycji o 3 dalej niz wskazuje it_obj2
* it_obj > 'z' // porowananie ZNAKOW
it_obj < it_obj2 // to to co wyzej, tylko ze powinno sprawdzac adresy ... ( pytanie - swoje, czy wskazywanych znakow ... )

Z góry dzięki !
Mrowqa
P-32933
pekfos
» 2011-05-10 19:24:46
no brawo. teraz nie wiadomo o co chodzi. ani logu nie dałeś ani nic..
P-32934
ison
» 2011-05-10 19:27:28
o coś takiego chodzi?
C/C++
#include <string>
#include <cstdio>

int main()
{
    std::string str = "abc";
    std::string::iterator it = str.begin();
    it += 5;
    if( it >= str.end() ) printf( "poza zakresem\n" );
   
}
P-32935
Mrowqa
Temat założony przez niniejszego użytkownika
» 2011-05-10 19:31:51
Dokładnie ;)
Tylko, że u mnie mimo to pętla nie chce się przerwać ;/ Sprawdzę kod jeszcze raz ...
PS tamte moje 'wątpliwości' to prawda czy nie ??

EDIT:
sprawdziłem, i jedynie błąd może tkwić tu, ale go tu nie widzę:
C/C++
// drug to iterator
while( * drug < 'A' || * drug > 'z' ||( * drug > 'Z' && * drug < 'a' ) )
{
    if( drug >= tekst_pomocniczy.end() ) // chyba wiadomo, tekst... to string
    {
        pierw = 2; // pierw to moja zmienna pomocnicza do opuszczenie zewnetrznej petli
        break;
    }
    drug++;
}
Korzystam z VC++ 2010

Pozdrawiam,
Mrowqa
P-32936
pekfos
» 2011-05-10 19:38:09
( * drug > 'Z' && * drug < 'a' )
error! error! warunek bez sensu.
chyba że chodzi ci o
[ \ ] ^ _ `
 bo gdyby było 'A' zamiast 'a' to nigdy by się nie spełnił.
P-32937
Mrowqa
Temat założony przez niniejszego użytkownika
» 2011-05-10 19:41:36
Co w tym złego ?? Pętla sprawdza czy znak nie jest literą. Zrobiłem sobie wydruk kontrolny i okazało się, że zmienna pierw NIGDY nie wyniosła 2 ;/
Skontroluje pętle jeszcze raz ... Może i warunek jest zły, ale ja myślę, że jest dobry ^^

Pozdrawiam,
Mrowqa
P-32938
pekfos
» 2011-05-10 19:44:05
jak chodzi ci czy znak nie jest literą użyj isalpha(). będzie prościej.
if( !isalpha( znak ) ) printf( "nie litera" );
P-32939
Mrowqa
Temat założony przez niniejszego użytkownika
» 2011-05-10 19:45:41
Sprawdzę tę funkcyjkę ;) Po moim kolejnym wydruku kontrolnym okazało się, że w ogóle do wnętrza pętli program nigdy nie wszedł ...

Wnioskując nie można porównywać tak znaków:
* it_obj < 'Z'
 a mi na tym zależy ( później w kodzie ). Co zrobić by móc tak porównać ?? Jakaś metoda iteratora, zwracająca wartość char? A może rzutowanie static_cast ??
P-32940
« 1 » 2
  Strona 1 z 2 Następna strona