pointers met '\0'

Status
Niet open voor verdere reacties.

revelian

Gebruiker
Lid geworden
20 mrt 2007
Berichten
81
Hoi,

Heb het volgende probleem. Ik probeer 2 strings letter voor letter te vergelijken zodat ik weet op welke posities ze gelijk zijn. Heb al wat code geschreven, maar de uitkomst is niet wat je zou verwachten. Zelf denk ik dat ik mijn String niet goed afsluit.

Hier mijn code:

Code:
#include <stdio.h>

int aantaldezelfde(char*, char*);

int main(){
char naam1[255], naam2[255], *n1, *n2;
int posities=0;
n1=naam1;
n2=naam2;

while((*n1++ = getchar())!= '\n');
*n1='\0';
while((*n2++ = getchar())!= '\n');
*n2='\0';
printf("de namen %s en %s \n", naam1, naam2);
posities = aantaldezelfde(naam1, naam2);
printf("Op %i posities zijn de letters hetzelfde\n ", posities);
return 0;
}

int aantaldezelfde(char *p, char *q){
int count=0, i=0;
while(*p!='\0' && *q!='\0'){
    if(*((p++)+i)==*((q++)+i))count++;
    i++;

}
return count;
}

Alvast bedankt !
 
Code:
     unsigned int ret(0);    
     while(*s1++ && *s2++)
       if(*s1 == *s2)
         ret++;
       else 
         return ret;

Zoiets ?
 
Hoi CoD_NL,

Dat wil jammer genoeg ook niet echt werken. Als ik dat zet in mijn functie, dan doet hij het alleen maar als het gaat om 2 namen met de zelfde lengte en ik moet dan ret-1 returnen. Dat is denk ik niet de bedoeling.

Wat ik maar niet snap is waarom het termination character '\0' niet wordt toegevoegd. Dit blijkt als je het programma runt. Als de namen worden uitgeprint, zouden ze op 1 regel uitgeprint moeten worden, maar dit gebeurd niet . . .

Ziet iemand de fout in het programma ?
 
Dat wil jammer genoeg ook niet echt werken. Als ik dat zet in mijn functie, dan doet hij het alleen maar als het gaat om 2 namen met de zelfde lengte en ik moet dan ret-1 returnen. Dat is denk ik niet de bedoeling.

Ik had de code daarstraks niet getest, en je hebt gelijk dat hij niet helemaal correct is. :o

Code:
    do{
       if(*ptc1 == *ptc2)
         c++;
    }while(*ptc1++ && *ptc2++);

Anders controleert ie de eerste waarde niet.

Wat ik maar niet snap is waarom het termination character '\0' niet wordt toegevoegd. Dit blijkt als je het programma runt. Als de namen worden uitgeprint, zouden ze op 1 regel uitgeprint moeten worden, maar dit gebeurd niet . . .

Ziet iemand de fout in het programma ?

Hier zit de fout in je code:
Code:
while((*n1++ = getchar())!= '\n');
*n1='\0';
while((*n2++ = getchar())!= '\n');
*n2='\0';

Probeer het volgende eens:
Code:
while((*n1++ = getchar()) != '\n');
  n1[strlen(n1)-1] = '\0';
while((*n2++ = getchar()) != '\n');
  n2[strlen(n2)-1] = '\0';

Als je dit met mijn (aangepaste :p) code gebruikt, dan doet het programma precies wat je wilt.

Code:
int aantaldezelfde(const char *s1, const char *s2)
{
    int c(0);
    while(*s1 == *s2 && *s1++ && *s2++) c++;

    return c;
}

int main(){
char naam1[255], naam2[255], *n1, *n2;
int posities=0;
n1=naam1;
n2=naam2;

while((*n1++ = getchar()) != '\n');
  n1[strlen(n1)-1] = '\0';
while((*n2++ = getchar()) != '\n');
  n2[strlen(n2)-1] = '\0';
  
printf("de namen %s en %s \n", naam1, naam2);
posities = aantaldezelfde(naam1, naam2);
printf("Op %i posities zijn de letters hetzelfde\n ", posities);

system("PAUSE");
return 0;
}

(de bovenstaande code controleert de string alleen in zijn geheel(alles moet gelijk zijn))
 
Laatst bewerkt:
Ah, srry, duurde een hele poos. Was dit inmiddels al vergeten :o

Ben verder gegaan met een ander projectje, maar nog bedankt CoD_NL ! :thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan