/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Strings vs Char's
Fra : Daniel Blankensteine~


Dato : 23-07-02 14:08

Hey hey

Lige et hurtigt spørgsmål, er der nogen grund til at bruge char[]'s når man
har strings?

mvh
db



 
 
Kent Friis (23-07-2002)
Kommentar
Fra : Kent Friis


Dato : 23-07-02 14:40

Den Tue, 23 Jul 2002 15:08:06 +0200 skrev Daniel Blankensteiner:
>Hey hey
>
>Lige et hurtigt spørgsmål, er der nogen grund til at bruge char[]'s når man
>har strings?

char[] er C
string er C++

Mvh
Kent
--
You haven't seen _multitasking_ until you've seen Doom and
Quake run side by side

Daniel Blankensteine~ (23-07-2002)
Kommentar
Fra : Daniel Blankensteine~


Dato : 23-07-02 14:52

"Kent Friis" <leeloo@phreaker.net> wrote in message
news:ahjmc2$954$1@sunsite.dk...
> >Lige et hurtigt spørgsmål, er der nogen grund til at bruge char[]'s når
man
> >har strings?
>
> char[] er C
> string er C++

Hhhmmm, det tror jeg ikke. I de 3 C++ bøger jeg har læst har jeg ikke set
forfatteren bruge strings, kun char[]'s.

mvh
db



Igor V. Rafienko (23-07-2002)
Kommentar
Fra : Igor V. Rafienko


Dato : 23-07-02 14:59

[ Daniel Blankensteiner ]

[ snip ]

> I de 3 C++ bøger jeg har læst har jeg ikke set forfatteren bruge
> strings, kun char[]'s.


Da er det på tide å bytte ut C++-hyllen din. C++-"bøkene" som _ikke_
snakker om std::string fortjener ikke papiret de er trykket på.





ivr
--
<peder> igorr: tcl ja... det er fra de dypeste avgrunnene i helvete det...
<peder> php er bare fra foajeen
            -- pederst på irc

Daniel Blankensteine~ (23-07-2002)
Kommentar
Fra : Daniel Blankensteine~


Dato : 23-07-02 15:11

"Igor V. Rafienko" <igorr@ifi.uio.no> wrote in message
news:xjvadoia6la.fsf@belluno.ifi.uio.no...
> > I de 3 C++ bøger jeg har læst har jeg ikke set forfatteren bruge
> > strings, kun char[]'s.
>
>
> Da er det på tide å bytte ut C++-hyllen din. C++-"bøkene" som _ikke_
> snakker om std::string fortjener ikke papiret de er trykket på.

mmmkay

mvh
db



Martin Moller Peders~ (23-07-2002)
Kommentar
Fra : Martin Moller Peders~


Dato : 23-07-02 21:18

In <ahjn01$bnk$1@sunsite.dk> "Daniel Blankensteiner" <db@traceroute.dk> writes:

>"Kent Friis" <leeloo@phreaker.net> wrote in message
>news:ahjmc2$954$1@sunsite.dk...
>> >Lige et hurtigt spørgsmål, er der nogen grund til at bruge char[]'s når
>man
>> >har strings?
>>
>> char[] er C
>> string er C++

>Hhhmmm, det tror jeg ikke. I de 3 C++ bøger jeg har læst har jeg ikke set
>forfatteren bruge strings, kun char[]'s.

Saa har du tre daarlige boeger.

/Martin




Mogens Hansen (23-07-2002)
Kommentar
Fra : Mogens Hansen


Dato : 23-07-02 21:49


"Kent Friis" <leeloo@phreaker.net> wrote

> char[] er C

og C++

Venlig hilsen

Mogens Hansen



Igor V. Rafienko (23-07-2002)
Kommentar
Fra : Igor V. Rafienko


Dato : 23-07-02 15:27

[ Daniel Blankensteiner ]

[ snip ]

> Lige et hurtigt spørgsmål, er der nogen grund til at bruge char[]'s
> når man har strings?


Ja, det er det. Et eksempel som kom opp en gang på
<news:fido7.su.c-cpp> omhandlet et tilfelle diskutert av Jon Bentley i
"Programming Pearls"[*]. Det ble til dels mer elegant med pekere[**].

Det er visse situasjoner som krever bruk av char*'ere for å jobbe med
tekstlige data. Kunsten er å vite når slike tilfeller inntreffer.
std::string er ikke bare til pynt i standardbiblioteket og i
_utgangspunktet_ burde man anvende den, framfor pekere (med det nevnte
forbeholdet).





ivr
[*] 2nd ed, ISBN 0-201-65788-0, Addison-Wesley, 1999
[**] <URL:news:i5qh29.u0f1.ln@kama.namesurfer.com>, for de som
behersker språket. Kort fortalt -- gitt en string S, finn den lengste
substringen T, slik at T forekommer i S minst 2 ganger (forekomstene
av T kan overlappe delvis, men ikke helt). Løsning med pekere har sine
vakre sider. Min løsning er forresten langt mer generell (og
illustrerer samtidig hvorfor vi trenger std::hash_map)
--
<peder> igorr: tcl ja... det er fra de dypeste avgrunnene i helvete det...
<peder> php er bare fra foajeen
            -- pederst på irc

Daniel Blankensteine~ (23-07-2002)
Kommentar
Fra : Daniel Blankensteine~


Dato : 23-07-02 15:42

"Igor V. Rafienko" <igorr@ifi.uio.no> wrote in message
news:xjv7kjma59v.fsf@belluno.ifi.uio.no...
> > Lige et hurtigt spørgsmål, er der nogen grund til at bruge char[]'s
> > når man har strings?
>
>
> Ja, det er det. Et eksempel som kom opp en gang på
> <news:fido7.su.c-cpp> omhandlet et tilfelle diskutert av Jon Bentley i
> "Programming Pearls"[*]. Det ble til dels mer elegant med pekere[**].
>
> Det er visse situasjoner som krever bruk av char*'ere for å jobbe med
> tekstlige data. Kunsten er å vite når slike tilfeller inntreffer.
> std::string er ikke bare til pynt i standardbiblioteket og i
> _utgangspunktet_ burde man anvende den, framfor pekere (med det nevnte
> forbeholdet).

Oki, takker.

mvh
db



Morten Boysen (23-07-2002)
Kommentar
Fra : Morten Boysen


Dato : 23-07-02 17:45

"Daniel Blankensteiner" <db@traceroute.dk> wrote in message
news:ahjke6$66$1@sunsite.dk...
> Hey hey
>
> Lige et hurtigt spørgsmål, er der nogen grund til at bruge char[]'s
når man
> har strings?

Nogle gange, har man ikke noget valg. Er du i tvivl, så brug
std::string. Det samme kan siges om normale C-arrays i forhold til
std::vector.


--
Morten Boysen


Mogens Hansen (23-07-2002)
Kommentar
Fra : Mogens Hansen


Dato : 23-07-02 21:54


"Daniel Blankensteiner" <db@traceroute.dk> wrote

> Lige et hurtigt spørgsmål, er der nogen grund til at bruge char[]'s når
man
> har strings?

Som udgangspunkt bør man i C++ foretrække at bruge "std::string" objekter i
stedet for "char[]", når man arbejder med tekst-strenge.
Det gælder i særdeleshed, når man har med tekst-strenge med variabel længde
at gøre.

Der er situationer, hvor "std::string" ikke er passende.
Ofte vil "std::vector" kunne bruges i den situation, som et bedre alternativ
til char[].
Det er situationer, hvor der ikke er tale en streng, men et array af
individuelle tegn.
F.eks. til at holde løsning af en multiple-choise opgave:
svar 1: a
svar 2: f
...

Der _kan_ være performance grunde, til at foretrække "char[]" frem for
"std::string".
Der vil typisk være een heap-allokering involveret i et string objekt - også
selvom det ligger på stakken. Det er ikke tilfældet for "char[]".
void foo()
{
std::string str1("hello world"); // propably one heap allocation
and one memory copy
char str2[] = "hello world"; // no heap allocation and one
memory copy
const char* str3 = "hello world; // no heap allocation and no memory
copy
}
I forbindelse med tekst-strenge med variabel længde, vil der typisk være een
heap allokering involveret - så der må man forvente at "std::string" ikke
har noget overhead.
Før man bruger den forklaring, bør man være _sikker_ på at der faktisk er et
problem (ved at _måle_), og at det kan løses ved at bruge "char[]"

Venlig hilsen

Mogens Hansen



Daniel Blankensteine~ (23-07-2002)
Kommentar
Fra : Daniel Blankensteine~


Dato : 23-07-02 22:50

"Mogens Hansen" <mogens_h@dk-online.dk> wrote in message
news:ahkfh3$11sc$2@news.cybercity.dk...
> > Lige et hurtigt spørgsmål, er der nogen grund til at bruge char[]'s når
> man
> > har strings?
>
> Som udgangspunkt bør man i C++ foretrække at bruge "std::string" objekter
i
> stedet for "char[]", når man arbejder med tekst-strenge.
> Det gælder i særdeleshed, når man har med tekst-strenge med variabel
længde
> at gøre.
>
> Der er situationer, hvor "std::string" ikke er passende.
> Ofte vil "std::vector" kunne bruges i den situation, som et bedre
alternativ
> til char[].
> Det er situationer, hvor der ikke er tale en streng, men et array af
> individuelle tegn.
> F.eks. til at holde løsning af en multiple-choise opgave:
> svar 1: a
> svar 2: f
> ...
>
> Der _kan_ være performance grunde, til at foretrække "char[]" frem for
> "std::string".
> Der vil typisk være een heap-allokering involveret i et string objekt -
også
> selvom det ligger på stakken. Det er ikke tilfældet for "char[]".
> void foo()
> {
> std::string str1("hello world"); // propably one heap allocation
> and one memory copy
> char str2[] = "hello world"; // no heap allocation and
one
> memory copy
> const char* str3 = "hello world; // no heap allocation and no memory
> copy
> }
> I forbindelse med tekst-strenge med variabel længde, vil der typisk være
een
> heap allokering involveret - så der må man forvente at "std::string" ikke
> har noget overhead.
> Før man bruger den forklaring, bør man være _sikker_ på at der faktisk er
et
> problem (ved at _måle_), og at det kan løses ved at bruge "char[]"

Oki, jeg takker alle for deres svar

mvh
db



Søg
Reklame
Statistik
Spørgsmål : 177496
Tips : 31968
Nyheder : 719565
Indlæg : 6408491
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste