07. april 2005 - 18:15
Der er
24 kommentarer og 1 løsning
Sammenligne to strenge
Jeg vil gerne sammnenligne to tekststrenge(en funktion som svarer til strncmp();) og har indtil videre dette som ikke fungerer: int sammenlign_nchar(const char *s1, const char *s2, int n){ n=2;//evt. indtastning fra brugeren int comp_res; s1="teststreng"; s2="strengtest"; if(*s1[n] == *s2[n]){//linie 12 og så noget mere... } Ideen er, at *s1 og *s2 peger på s1 og s2 og jeg kan tilgå disse arrays med *s1[n], hvor n er antallet af bogstaver der skal sammenlignes. Jeg får at vide at der i linie 12 er invalid type of unary * Jeg er ved at lære C programmering, så jeg vil helst ikke have funktionen foræret!
Annonceindlæg fra Deloitte
07. april 2005 - 18:33
#1
Sammenlign 2 variable i een if-sætning med == (IKKE på hver side af == den er HELT gal!)
07. april 2005 - 18:42
#2
du skal vel have en for(i=0;i<n;i++) og testet skal være if(s1[i] == s2[i])
07. april 2005 - 19:03
#3
Hvis jeg gerne vil bruge pointere, skal der i if sætningen så ikke stå *s1[i] og i det hele taget igennem funktionen? Jeg har følgende: Jeg ved godt at det ikke hænger helt sammen nu, sådan som jeg har brugt pointere. Men opgaven vil jeg meget gerne løse, så jeg til sidst i løkken 'flytter' pointeren med *s1++; Jeg tilføjer først til sidst at det skrives ud, så det ser vi lige bort fra... int sammenlign_nchar(const char *s1, const char *s2, int n){ int i, comp_res; for ( i = 0; i <= n; i++){ if(s1[n] == s2[n]){ comp_res=0; } else if(s1[i] < s2[i]){ comp_res=-1; } else if(s1[i] > s2[i]){ comp_res=1; } *s1++; } }
07. april 2005 - 19:04
#4
med: char *s skal du bruge enten *s eller s[i] men ikke *s[i]
07. april 2005 - 19:12
#5
Havde vist n i stedet for i ovenfor også! Giver følgende ikke mening int sammenlign_nchar(const char *s1, const char *s2, int n){ int i, comp_res; for ( i = 0; i <= n; i++){ if(*s1 == *s2){ comp_res=0; } else if(*s1 < *s2){ comp_res=-1; } else if(*s1 > *s2){ comp_res=1; } *s1++; *s2++; } } så løber jeg vel strengene s1 og s2 igennem med pointerne *s1 og *s2
07. april 2005 - 19:14
#6
i < n ikke i <= n bår du starter i 0
07. april 2005 - 19:14
#7
du skal returnere lige så snart du har en forskel
07. april 2005 - 19:15
#8
*s1++; *s2++; skal vel være s1++; s2++;
07. april 2005 - 19:19
#9
Altså return comp_res efter hver if-del, eks. if(*s1 == *s2){ comp_res=0; return comp_res; } skal jeg sætte en break ind efter return, så funktionen ikke kører videre eller sørger return for det?
07. april 2005 - 19:26
#10
Kun return hvis de er forskellige - ikke hvis de er ens return returnerer fra funktionen med det samme
07. april 2005 - 19:32
#11
lige udenfor for-løkken har jeg tilføjet printf("\n%s", comp_res); Er dette så ikke måden at kalde den på const char *s1="test"; const char *s2="hest"; int n=2; sammenlign_nchar(s1, s2, n);
07. april 2005 - 19:52
#12
det ser rigtigt ud
08. april 2005 - 00:10
#13
Der sker absolut intet i programmet... Jeg kan trykke på en tast for at afslutte og det er det!
08. april 2005 - 00:15
#14
Eller den skriver (null) når de to strenge er ens, men ellers skrives der ingen ting!
08. april 2005 - 07:45
#15
Prøv lige og post hele koden
08. april 2005 - 08:11
#16
#include <stdio.h> #include <stdlib.h> int sammenlign_nchar(const char *s1, const char *s2, int n){ int i, comp_res; //&& *s1 != '\0' for ( i = 0; i < n; i++){ if(*s1 == *s2){ comp_res = 0; } else if(*s1 < *s2){ comp_res = -1; return comp_res; } else if(*s1 > *s2){ comp_res = 1; return comp_res; } *s1++; *s2++; } printf("\n%s", comp_res); } int main(int argc, char *argv[]) { const char *s1="test"; const char *s2="test"; int n=2; sammenlign_nchar(s1, s2, n); system("PAUSE"); return 0; }
08. april 2005 - 08:32
#17
Prøv lige og erstat: printf("\n%s", comp_res); med: comp_res = 0; printf("%d\n", comp_res);
08. april 2005 - 08:50
#18
comp_res = 0; printf("%d\n", comp_res); return comp_res;
08. april 2005 - 10:57
#19
så skriver dden 0
08. april 2005 - 11:05
#20
Den skriver også 0 når jeg skriver: printf("%d\n", comp_res); og strengene er ens, men når de ikke er ens skrives den ingenting!
08. april 2005 - 11:54
#21
selvfølgelig fordi der er jo ikke en printf før de return's
08. april 2005 - 14:38
#22
Helt sikkert, det virker, kanon :) For lige at få det helt på plads. hvorfor er det man skriver return comp_res; og ikke bare return. Jeg tænker på det som om at den returnerer værdien af comp_res, men den sørger vel bare for at den returnerer fra funktionen? Du smider selvfølgelig bare et svar.
08. april 2005 - 14:40
#23
netop fordi du skal returne en værdi - funktionen returnerer int ikke void
08. april 2005 - 14:40
#24
og svar
08. april 2005 - 14:42
#25
aha... Mange tak for rigtig god hjælp.
Kurser inden for grundlæggende programmering