Jump to content

Ce Face Strcmp?


GodsOtherHand

Recommended Posts

Din cate imi amintesc , strcmp compara 2 siruri de caractere. Functia iti va da un rezultat mai mic , egal sau mai mare decat 0.

Ai varaibila c de tip char in care pui litera a. Afisezi rezultatul functiei strcmp care va compara variabila c (in care tu ai litera a) si litera a. In mod normal ar trebui sa-ti afiseze 0 cred.

La restul ar trebui sa fie la fel , compara litera b cu spatiu si litera c.

(eu lucrez cu cout/cin nu cu printf si scanf ,dar asta cred ca afiseaza)

Link to comment
Share on other sites


char c;

c='a';

printf("%d",strcmp(c,"a"));

asta imi afiseaza 1.

printf("strcmp: %d", strcmp("b"," "));

afiseaza 1

printf("strcmp: %d", strcmp("b","c"));

afiseaza -1 Cand compar 2 siruri, imi returneaza 1 daca sunt la fel, -1 daca sunt diferite.Daca unu din siruri este spatiu sau \n , atunci imi returneaza 1,desii nu sunt la fel. Chestiile astea se intampla pe desktop (WindowsXP cu Microsoft visual studio ultimate 2010) si pe laptop (Geany IDE, pe linux). Are cineva vreo idee ce fac gresit? also la comanda "printf("%d",strcmp(c,"a"));" imi retunreaza o eroare, imi zice ca trebuia pointer..asa ca tre sa folosesc

printf("%d",strcmp(&c,"a"));

desii stiu ca nu trebuia adresa..

love is a verb
Love is a doing word

Link to comment
Share on other sites

sintaxa strcmp:


int strcmp ( const char * str1, const char * str2 );

conversie: Dacă un operator aritmetic binar are doi operanzi de tipuri diferite, atunci tipul de nivel mai scăzut este convertit la tipul de nivel mai înalt înainte de operaţie.

char  < short  <  int  <  long;

strcmp returneaza: -1, daca str1 este mai mic decat str2 0, daca sunt egale 1, daca str1 este mai mare decat str2 take a look la asta:D ASCII CODE: My link primul exemplu:
char c;

c='a';

printf("%d",strcmp(c,"a"));

//nu va putea converti de la tipul char la tipul const char;

al doilea exemplu:

ai space: care in dec e 32, 'b' e 98 daca nu ma insel.

al treilea exemplu: este corect la fel ca si 2. pentru ca transmite adresa(&) lui c, si e strcmp( de const char, si const char)>>CORECT:D

rezultatele vor fi:

pentru primul exemplu>>EROARE

exemplul 2. >>1

exemplul 3. >>1

ps: foloseste visual studio, sau in cel mai rau caz, ...oh sh**, dev :((

  • Upvote 1
Link to comment
Share on other sites

Folosesc microsoft visual studio 2011(windowsXP). :) plus Geany pe linux, si ambele imi dau la fel..

Cum sa nu poate sa converteasca?

daca bag valoarea "a" intro alta variabila numita d , ar merge? ca si at imi comenteaza.

Problemele sunt: de ce strcmp returneaza valori care nu sunt standard C?

De ce vrea un pointer din moment de un char este defapt un pointer, si daca fac la scoala sau ma uit in orice documentatie, nu imi trebe & ?

app, la care zici tu ca imi da eroare?

Nu vreau chestii de genu " foloseste programu X, Y, ca ala sigur merge", din simplul motiv ca folosesc CodeBlock si merge bine. Insa vreau sa stiu in continuare de ce nu merg chestiile acolo cum trebe..ambele sunt instalate recent (pe XP a mai fost Visual si mergea bine).

love is a verb
Love is a doing word

Link to comment
Share on other sites

Din cate imi amintesc , strcmp compara 2 siruri de caractere. Functia iti va da un rezultat mai mic , egal sau mai mare decat 0.

Ai varaibila c de tip char in care pui litera a. Afisezi rezultatul functiei strcmp care va compara variabila c (in care tu ai litera a) si litera a. In mod normal ar trebui sa-ti afiseze 0 cred.

La restul ar trebui sa fie la fel , compara litera b cu spatiu si litera c.

(eu lucrez cu cout/cin nu cu printf si scanf ,dar asta cred ca afiseaza)

ps: nu e "mare" diferenta intre ele.

la printf si scanf ai nevoie de un specificator(ce afisezi-in cazul lui printf, si ce citesti-in cazul lui scanf, gen: int, char, etc.. ):

Descriptori de format:

– %c pentru o variabilă sau o valoare de tip char;

– %s pentru o variabilă sau o expresie de tip şir de caractere.

– %d pentru o variabilă sau o valoare de tip int;

– %u pentru o variabilă sau o valoare de tip unsigned;

– %ld pentru o variabilă sau o valoare de tip long;

– %lu pentru o variabilă sau o valoare de tip unsigned long;

– %hd pentru o variabilă sau o valoare de tip short;

– %hu pentru o variabilă sau o valoare de tip unsigned short.

– %f pentru o variabilă sau o valoare de tip float;

– %lf pentru o variabilă sau o valoare de tip double;

– %Lf pentru o variabilă sau o valoare de tip long double.

pentru mai multe exemple: link

Folosesc microsoft visual studio 2011(windowsXP). :) plus Geany pe linux, si ambele imi dau la fel..

Cum sa nu poate sa converteasca?

daca bag valoarea "a" intro alta variabila numita d , ar merge? ca si at imi comenteaza.

Problemele sunt: de ce strcmp returneaza valori care nu sunt standard C?

De ce vrea un pointer din moment de un char este defapt un pointer, si daca fac la scoala sau ma uit in orice documentatie, nu imi trebe & ?

app, la care zici tu ca imi da eroare?

Nu vreau chestii de genu " foloseste programu X, Y, ca ala sigur merge", din simplul motiv ca folosesc CodeBlock si merge bine. Insa vreau sa stiu in continuare de ce nu merg chestiile acolo cum trebe..ambele sunt instalate recent (pe XP a mai fost Visual si mergea bine).

un pointer e un pointer, o adresa e altceva.

Un pointer p (chiar declarat constant) este o variabilă (care conţine o adresă), deci are el însuşi o adresă, prin urmare poate fi operand pentru operatorul unar &, valoarea expresiei &p fiind adresa de memorie la care se află valoarea lui p. Dacă a este un nume de masiv, expresia

&a are convenţional aceeaşi valoare ca a, (deci coincide cu &a[0]), întrucât valoarea identificatorului a nu este inregistrată într-o locaţie de memorie.

Deoarece un pointer conţine adresa unui obiect, cu ajutorul lui putem avea acces, în mod indirect, la acea variabilă (obiect).

Să zicem că x este o variabilă de tip întreg şi px un pointer la un întreg. Atunci aplicând operatorul unar & lui x, instrucţiunea:

px = &x;

atribuie variabilei px adresa variabilei x; în acest fel spunem că px indică spre x.

Invers, dacă px conţine adresa variabilei x, atunci instrucţiunea:

y = *px;

atribuie variabilei y conţinutul locaţiei pe care o indică px , determinată cu operatorul unar * (numit dereferenţiere sau indirectare).

ps: eroare da la primul exemplu.

si nu recomand anumite programe ca asa vreau eu sau...etc.

stiu ca am lucrat in mai multe decat crezi tu, si stiu rezultatele.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.