---
title: "jämförelse av strängar i C?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/c-cpp/68256-jämförelse-av-strängar-i-c"
topic: "C/C++"
topic_url: "https://www.webforum.nu/amne/c-cpp"
author: "mangan"
published: "2003-02-14T11:02:26.000Z"
updated: "2003-02-17T17:50:34.000Z"
replies: 3
views: 309
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/c-cpp/68256-jämförelse-av-strängar-i-c"
---

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

## #1 — mangan, 2003-02-14T11:02Z

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\]

Permalänk: https://www.webforum.nu/p/68256

## #2 — mangan, 2003-02-14T14:34Z

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å?

Permalänk: https://www.webforum.nu/p/951026

## #3 — mangan, 2003-02-17T13:47Z

Nu är problemet löst!

Permalänk: https://www.webforum.nu/p/952798

## #4 — Marcus E, 2003-02-17T17:50Z

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

Permalänk: https://www.webforum.nu/p/952934

---

Tråden på webben: https://www.webforum.nu/amne/c-cpp/68256-jämförelse-av-strängar-i-c
