[ RMAN @ 11.02.2009. 16:42 ] @
Kako da uradim da mi funkcija strlen vraca duzinu stringa ali da pri tom ja ne napisem kolike je duzine string?
Znaci u zavisnosti od toga sta otkucam funkcija mi vrati duzinu stringa.
[ dusty @ 11.02.2009. 17:43 ] @
WTF Pa strlen to i radi ?! Stringovi se zavrsavaju sa NULL karakterom, a strlen vraca koliko karaktera ima do njega .... Zbunj
[ RMAN @ 11.02.2009. 18:03 ] @
Kao prvo string se ne zavrsava sa NULL vec sa '/O'.
Kao drugo ja treba da definisem dinamicki niz preko pokazivaca i ukoliko napisem dve reci u stringu strlen vraca samo duzinu prve reci(sve sto je posle razmaka ne vidi).
[ dusty @ 11.02.2009. 18:20 ] @
Citat:
 Kao prvo string se ne zavrsava sa NULL vec sa '/O'.


Nece biti. String se zavrsava sa NULL karakterom iliti eskejp sekvencom '\0' (znaci broj 0, a ne slovo O), to je ekvivalent.

Citat:
Kao drugo ja treba da definisem dinamicki niz preko pokazivaca i ukoliko napisem dve reci u stringu strlen vraca samo duzinu prve reci(sve sto je posle razmaka ne vidi).


Onda radis nesto pogresno Daj kod da vidimo i reci sta ubacujes u string.
[ X Files @ 11.02.2009. 18:29 ] @
^
^
Pomesao si nesto.

NULL jeste isto sto i '\0' zabelezeno kao karakter (char), odnosno 0 zabelezeno kao celobrojna vrednost (int).

strlen() vraca duzinu stringa do prvog NULL-a, bez obzira da li je niz kreiran dinamicki ili za vreme kompajliranja. Razmaci u tekstu nemaju uticaj na strlen().

Ono sto tebe muci je nacin na koji scanf() funkcija u C/C++ funkcionise kada ima %s, pa kasnije ni strlen() ne obavi posao, jer je do 'greske' doslo ranije.

Code:

#include "stdio.h"
int main()
{
    char niz[1000];
    //scanf( "%s", &niz ); // <--- OVO IZBACI
    gets( niz ); // <--- OVO UBACI
    printf("%d\n", strlen(niz) );
    return 0;
}

Sada pogledaj rezultat.
[ RMAN @ 11.02.2009. 19:02 ] @
Slucajno sam napisao \O jer sam kucao sa mobilnog telefona, znam da je \0 ali nisam znao da je NULL isto sto i \0.
Mene zanima u c++ u kako to da realizulem.

Odnosno necu da imam char promenljivu poznate duzine (kao npr. char[1000] ) vec hocu da mi funkcija strlen vraca vrednost stringa koji ima duzinu u zavisnosti sta ja unesem. Znam ja da uradim to u c-u i znam da treba funkcija gets ali ne znam kada charu nije definisana duzina.
[ night-shift @ 11.02.2009. 19:44 ] @
Napravi neku klasu String, koja će imati metodu getDuzina...
[ pcaca @ 11.02.2009. 19:54 ] @
Citat:
RMAN: Slucajno sam napisao \O jer sam kucao sa mobilnog telefona, znam da je \0 ali nisam znao da je NULL isto sto i \0.
Mene zanima u c++ u kako to da realizulem.

Odnosno necu da imam char promenljivu poznate duzine (kao npr. char[1000] ) vec hocu da mi funkcija strlen vraca vrednost stringa koji ima duzinu u zavisnosti sta ja unesem. Znam ja da uradim to u c-u i znam da treba funkcija gets ali ne znam kada charu nije definisana duzina.

Moras negde alocirati opredelenu kolicinu memorije pre nego sto ucitas string on se mora negde smestiti. U primer koji ti je dao X Files nece duzina stringa biti 1000 karaktera nego je toliko alocirano kao buffer za string koj ce korisnik uneti, strlen ce vratiti duzinu stringa koji je korisnik uneo.

Ako bas zelis da "rucno" ne alociras memoriju opredelene duzine, a treba ti C++, onda koristi STL string.

Code:
#include <iostream>
#include <string>
using namespace std;

int main()
{
    string s;
    getline(cin, s);
    cout << "Duzina stringa je: " << s.size() << endl;
    return 0;
}
[ RMAN @ 11.02.2009. 21:02 ] @
E hvala! To mi je trebalo :)