webForumDet fria alternativet

jämförelse av strängar i C?

C/C++

3 svar · 291 visningar · startad av mangan

Medlem sedan feb. 2003216 inlägg
Frågan#1

Hej...igen!

jag håller på att sortera en array av struct på deras titel (det handlar om filmer). Sorteringen funkar hyfsat men går fel vid enstaka filmtitlar. T.ex. när en filmtitel börjar med liten bokstav.

Jag använder strncmp för att jämföra char arrayerna och undrar hur denna funktion jämför "strängarna"?

går den efter ASCII-värden för varje tecken, även blanksteg?

[edit]
Jag får följande mycket underliga utskrift vid användning av strncmp. Resultat under 0 betyder att den första titeln är mindre än den andra.

2001: A Space Odyssey ::: A Fish Called Wanda = 5
A Farewell to Arms ::: A Fish Called Wanda = 2
A Farewell to Arms ::: A Fish Called Wanda = -1
2001: A Space Odyssey ::: A Fish Called Wanda = -1

det konstiga i ovanstående utskrift är att metoden ger olika resultat vid samma jämförelse.....
[/edit]

Medlem sedan feb. 2003216 inlägg
#2

Jag har kommit längre i felsökningen och gjort en egen metod som jämför strängarna med varandra char för char.

//***** STRING_CMP *****
int string_cmp(char str1[], char str2[]) {
  int i=0,j=0;
  while((str1[i]!='\0') && (str2[j]!='\0')) {
    printf("\n%d ::: %d", toascii(str1[i]), toascii(str2[j]));
    if(toascii(str1[i]) < toascii(str2[j])) {
      printf(" = -1\n");
      return -1;
    }
    if(toascii(str1[i]) > toascii(str2[j])) {
      printf(" = -1\n");
      return 1;
    }
    i++;
    j++;
  }
  printf(" = 0\n");
  return 0;
}

Detta verkar fungera...ett tag iaf sen börjar det hända konstiga saker...Utskriften vid jämförelse blir då så här:

//-------------------------------------------------
koll: 656
A Farewell to Arms ::: A Fish Called Wanda
84 ::: 84
104 ::: 104
101 ::: 101
32 ::: 32
83 ::: 80 = -1

koll: 657
A Farewell to Arms ::: A Fish Called Wanda
84 ::: 84
104 ::: 104
101 ::: 101
32 ::: 32
84 ::: 83 = -1

koll: 658
2001: A Space Odyssey ::: A Fish Called Wanda
84 ::: 84
104 ::: 104
101 ::: 101
32 ::: 32
83 ::: 83
105 ::: 105
108 ::: 120 = -1
//--------------------------------------------

Vad kan detta bero på?

Medlem sedan feb. 2003216 inlägg
#3

Nu är problemet löst!

Medlem sedan maj 20021 466 inlägg
#4

Prova funktionerna strnicmp/_strnicmp och stricmp/_stricmp. De finns i de flesta miljöer.

322 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
195 ms — deklarationer (db)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)
196 ms — ändringar (db)