/ 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
Hvordan sammenligner jeg 2 strenge som IKK~
Fra : Flare


Dato : 04-02-02 02:23

Jeg er ved at lave et lille password program i c++, men nok om det. Jeg har
et struct

struct UserData {
int id;
string navn;
string password;
};

UserData Bruger;

string bruger;

Hvordan sammenligner jeg Bruger.navn med bruger?

Keg kan jo ikke bruge strcmp da de ikke er constante og jeg ved ikke
hvordan man cast´er dem til const...(hvis man kan..jeg er forholdsvis
neewbie)

Jeg kan godt sige

if (Bruger.navn == bruger )

Men det opfatter kun om det rigtige antal bogstaver i strengene passer
sammen...og det dur jo ikke

Håber nogen kan hjælpe.
Anders



 
 
Mogens Hansen (04-02-2002)
Kommentar
Fra : Mogens Hansen


Dato : 04-02-02 07:07


"Flare" <dct_flare@hotmail.com> wrote in message
news:3c5de267$0$216$edfadb0f@dspool01.news.tele.dk...

>
> Keg kan jo ikke bruge strcmp da de ikke er constante og jeg ved ikke
> hvordan man cast´er dem til const...(hvis man kan..jeg er forholdsvis
> neewbie)
>

Det spiller ikke nogen rolle om om strengen er konstant eller ej.
Hvis det er signaturen for strcmp du tænker på

int strcmp(const char *s1, const char *s2);

så betyder det blot at "strcmp" lover at den ikke ændrer på nogen af de to
strenge for at sammenligne dem - og det lyder jo egentligt meget fornuftigt.

Hvis du vil bruge "strcmp" sammen med "string", kan du bruge
member-funktionen "c_str":
if(0 == strcmp(Bruger.navn.c_str(), bruger.c_str())) {


>
> Men det opfatter kun om det rigtige antal bogstaver i strengene passer
> sammen...og det dur jo ikke
>

Sammenligningen går ikke _kun_ på om antallet af bogstaver i de 2 "string"
objekter er ens - indholdet skal også være ens. Hvis de to strenge har
forskellige længer, er de naturligvis ikke identiske.
Equal operatoren undersøger om _værdien_ af 2 objekter er identisk.

Er det det du har brug for ?


Venlig hilsen

Mogens Hansen



Søren B. Thygesen (04-02-2002)
Kommentar
Fra : Søren B. Thygesen


Dato : 04-02-02 11:11

> Keg kan jo ikke bruge strcmp da de ikke er constante og jeg ved ikke
> hvordan man cast´er dem til const...(hvis man kan..jeg er forholdsvis
> neewbie)
>

Casting til const sker implicit. At strcmp forventer const parametre
kan du opfatte som et løfte til dig om at den ikke ændrer din streng.
Rent teknisk kan du sagtens bruge strcmp men du skulle nok ikke gøre
det da det ser ud som om du bruger std::string. Brug
std::string::compare istedet.

Mvh,
S. Bro

Bertel Lund Hansen (04-02-2002)
Kommentar
Fra : Bertel Lund Hansen


Dato : 04-02-02 16:04

Flare skrev:

>Hvordan sammenligner jeg Bruger.navn med bruger?

Strcmp.

>Keg kan jo ikke bruge strcmp da de ikke er constante

Ok jo.

>og jeg ved ikke hvordan man cast´er dem til const...

Man kan ikke caste en variabel størrelse til at være uvariabel
(konstant).

>if (Bruger.navn == bruger )
>Men det opfatter kun om det rigtige antal bogstaver i strengene passer
>sammen...

Nej det gør ej. Det tester om de to variabelnavne refererer til
den samme streng - altså ikke til to ens men til den fysisk
samme.

--
Bertel
http://lundhansen.dk/bertel/   FIDUSO: http://fiduso.dk/

Mogens Hansen (04-02-2002)
Kommentar
Fra : Mogens Hansen


Dato : 04-02-02 16:27


"Bertel Lund Hansen" <nospam@lundhansen.dk> wrote
> Flare skrev:


>
> >if (Bruger.navn == bruger )
> >Men det opfatter kun om det rigtige antal bogstaver i strengene passer
> >sammen...
>
> Nej det gør ej. Det tester om de to variabelnavne refererer til
> den samme streng - altså ikke til to ens men til den fysisk
> samme.
>

Ud fra det som Ander skrev oprindeligt, er såvel "Bruger.navn" og "bruger"
at typen "string".
Idet jeg antager at "string" er ISO C++ typen "std::string", tester

if(Bruger.navn == bruger)

om _værdien_ af de 2 variable er _ens_.
Det spiller således ikke nogen rolle om de 2 variable er fysisk den samme
(hvad de ikke er ud fra den kode som Anders skrev).

Hvis "string" i stedet er en typedef for "char*" i en eller anden form er
det rigtigt hvad du siger - ellers ikke.

Venlig hilsen

Mogens Hansen



Bertel Lund Hansen (04-02-2002)
Kommentar
Fra : Bertel Lund Hansen


Dato : 04-02-02 16:29

Mogens Hansen skrev:

>Idet jeg antager at "string" er ISO C++ typen "std::string", ...

Jeg skulle vist have lagt bedre mærke til de to små plusser.

--
Bertel
http://lundhansen.dk/bertel/   FIDUSO: http://fiduso.dk/

Igor V. Rafienko (04-02-2002)
Kommentar
Fra : Igor V. Rafienko


Dato : 04-02-02 16:30

[ Bertel Lund Hansen ]

[ snip ]

> >Hvordan sammenligner jeg Bruger.navn med bruger?
>
> Strcmp.


std::string:==(), AFAICS. strcmp er bare ondt, som resten av
str*-familien.

[ snip ]


> >og jeg ved ikke hvordan man cast´er dem til const...
>
> Man kan ikke caste en variabel størrelse til at være uvariabel
> (konstant).


Huh?

int *c = new int( 3 );
const int *c = (const int*)c;

skulle være ulovlig? (jeg forstår godt at det kan være ulovlig den
andre veien, men hva er galt i koden over?).

[ snip ]





ivr
--
ëÏÇÄÁ Ñ ÅÍy ×ÅÖÌÉ×Ï ÎÁÍÅËÁÌÁ ÎÁ ÔÏ, ÞÔÏ ÎÅ y ×ÓÅÈ ÐpÉÇÌÁÛÅÎÎÙÈ ÍÏÖÅÔ
ÂÙÔØ ÜÌÅËÔpÏÎÎÁÑ ÐÏÞÔÁ, óÅpÅÇÁ ÄÅÌÁÌ Ë×ÁÄpÁÔÎÙÅ ÇÌÁÚÁ É ÓÐpÁÛÉ×ÁÌ -
ÚÁÞÅÍ ×ÏÏÂÝÅ ÔÁËÉÈ ÌÀÄÅÊ ÐpÉÇÌÁÛÁÔØ ÎÁ Ó×ÁÄØÂy.
   -- "úÁÐÉÓËÉ ÖÅÎÙ - ðÏÓÌÅÄÎÉÅ ÄÎÉ ÐÅÒÅÄ Ó×ÁÄØÂÏÊ", á. üËÓÌÅÒ

Morten Brix Pedersen (04-02-2002)
Kommentar
Fra : Morten Brix Pedersen


Dato : 04-02-02 18:02

Flare wrote:

> Jeg kan godt sige
>
> if (Bruger.navn == bruger )
>
> Men det opfatter kun om det rigtige antal bogstaver i strengene passer
> sammen...og det dur jo ikke


Nej? Hvor får du det fra? operator== i std::string classen er din ven,
du kan nemt sammenligne 2 strings med hinanden.

- Morten.


Flare (04-02-2002)
Kommentar
Fra : Flare


Dato : 04-02-02 18:18

Mange Tak for alle indlægende...Jeg havde vidst misforstået noget ang.
hvordan definitation på strcmp skulle fortolkes...Men efter at have
gennemlæst alle indlæggende har jeg fået det til at virke...Har prøvet flere
af de forslået metoder og en del af dem virker...Tak!

Anders



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

Månedens bedste
Årets bedste
Sidste års bedste