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

Długość ciągu znakowego

Ostatnio zmodyfikowano 2015-07-30 08:37
Autor Wiadomość
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ł:
C/C++
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!
P-135273
killjoy
» 2015-07-26 21:44:52
P-135274
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).
P-135295
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ć.
P-135296
Elaine
» 2015-07-27 18:35:10
U mnie nie działa.
C/C++
#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';
}
P-135301
Kaikso
» 2015-07-29 00:27:27
C/C++
#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ć.

U mnie nie działa.
A u mnie działa.
P-135375
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):

C/C++
int dlugoscLancucha( const char tab_[] )
{
    for( int i = 0;; ++i )
    if( tab_[ i ] == '\0' )
         return i;
   
}
P-135381
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):
C/C++
if( tab_[ i ] == '\0' )
Czyli z poprzednim, równoznacznym zapisem zgadywałeś..?

tablica kończy się \0
To nie jest dokładne.
C/C++
char tab[] = { 'a', 'b', 'c' };
std::cout << dlugoscLancucha( tab );
Mi akurat wypisało 6.
P-135385
« 1 » 2
  Strona 1 z 2 Następna strona