Długość ciągu znakowego
Ostatnio zmodyfikowano 2015-07-30 08:37
kitsss Temat założony przez niniejszego użytkownika |
Długość ciągu znakowego » 2015-07-26 21:37:38 Mam konieczność odczytywania długości ciągów znakowych (tylko takich podanych bezpośrednio w cudzysłowach (np. "Ala ma, koty dwa" - powinno zwrócić 16) Wpadłem na taki pomysł: int dlugoscLancucha( const char tab_[] ) { for( int i = 0;; ++i ) if( !tab_[ i ] ) return i; }
Na kilku przykładach, które testowałem, działa. I mam pytanie, czy taki sposób jest poprawny i będzie zawsze działał prawidłowo? A może istnieje lepszy sposób na rozwiązanie tego problemu? Pozdrawiam! |
|
killjoy |
» 2015-07-26 21:44:52 |
|
kitsss Temat założony przez niniejszego użytkownika |
» 2015-07-27 15:38:35 Zapomniałem napisać, że nie chciałbym posługiwać się żadną biblioteką (w celach dydaktycznych mam zamiar napisać własny string). |
|
pekfos |
» 2015-07-27 15:41:11 I mam pytanie, czy taki sposób jest poprawny i będzie zawsze działał prawidłowo? |
Dla każdego c-stringa tak. A może istnieje lepszy sposób na rozwiązanie tego problemu?
|
Można to skrócić. |
|
Elaine |
» 2015-07-27 18:35:10 U mnie nie działa. #include <vector> #include <iostream>
int dlugoscLancucha( const char tab_[] ) { for( int i = 0;; ++i ) if( !tab_[ i ] ) return i; }
int main() { std::vector < char > v; v.reserve( 5000000001 ); v.assign( 5000000000, 'a' ); v.push_back( '\0' ); std::cout << dlugoscLancucha( v.data() ) << '\n'; } |
|
Kaikso |
» 2015-07-29 00:27:27 #include <vector> #include <iostream>
int dlugoscLancucha( const char tab_[] ) { for( int i = 0;; ++i ) if( !tab_[ i ] ) return i; }
int main() { std::vector < char > v; v.reserve( 5000000001 ); v.assign( 5000000000, 'a' ); v.push_back( '\0' ); std::cout << dlugoscLancucha( v.data() ) << '\n'; } |
Jeśli macie mniej niż 6±1GB RAM-u to nie polecam testować. A u mnie działa. |
|
kitsss Temat założony przez niniejszego użytkownika |
» 2015-07-29 13:35:36 Aktualnie, korzystając z wiedzy że tablica kończy się \0 robię tak (co jest bardziej przejrzyste i dokładne): int dlugoscLancucha( const char tab_[] ) { for( int i = 0;; ++i ) if( tab_[ i ] == '\0' ) return i; } |
|
pekfos |
» 2015-07-29 13:52:07 Aktualnie, korzystając z wiedzy że tablica kończy się \0 robię tak (co jest bardziej przejrzyste i dokładne): |
Czyli z poprzednim, równoznacznym zapisem zgadywałeś..? To nie jest dokładne. char tab[] = { 'a', 'b', 'c' }; std::cout << dlugoscLancucha( tab );
Mi akurat wypisało 6. |
|
« 1 » 2 |