---
title: "Sortera CArray?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/c-cpp/183744-sortera-carray"
topic: "C/C++"
topic_url: "https://www.webforum.nu/amne/c-cpp"
author: "SilvioF"
published: "2010-06-09T08:05:38.000Z"
updated: "2010-06-10T14:42:16.000Z"
replies: 5
views: 1350
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/183744-sortera-carray"
---

# Sortera CArray?

## #1 — SilvioF, 2010-06-09T08:05Z

Sitter med en inlämningsuppgift för den sista delen i C++ kursen.
Dock så verkar jag ha fått problem när jag ivll sortera en CArray i bokstavsordning.

Jag har följande kod:

```
int N = contacts.GetSize();
	for (int iter = 0; iter < N-1; iter++)
	{
		for(int i = 0; i < N-1; i++)
		{
			if(contacts[i].m_sName, contacts[i+1].m_sName)
			{
				CString tmp_sName = contacts[i].m_sName;
				contacts[i+1].m_sName = tmp_sName;
				CString tmp_sAddress = contacts[i].m_sAddress;
				contacts[i+1].m_sAddress = tmp_sAddress;
				CString tmp_sPhone = contacts[i].m_sPhone;
				contacts[i+1].m_sPhone = tmp_sPhone;
				CString tmp_sEmail = contacts[i].m_sEmail;
				contacts[i+1].m_sEmail = tmp_sEmail;
				CString tmp_sNotes = contacts[i].m_sNotes;
				contacts[i+1].m_sNotes = tmp_sNotes;
			}
		}
	}
```

Tyvärr så är det så att vi fick färdig kod för denna uppgift som vi skall modifiera för att uppnå ett slutresultat. Det visade sig att den CArray som används inte är dimensionerad utan den hämtas från en class med parametrarna *m_sName, m_sAddress, m_sPhone, m_sEmail* och *m_sNotes*. Detta gör att jag inte kan använda mig av *sort()* då det skulle innebära att allt kommer i helt fel ordning i slutändan (jag har provat och det var en katastrof).

Därför försöker jag mig nu på en bubblesort som ser ut som ovan.
Dock så blir det väldigt konstigt. Den sorterar de två första posterna och tar bort resterade.

Någon som har ett gott öga till detta och kan hjälpa mig lite?

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

## #2 — msossna, 2010-06-09T09:41Z

```
if(contacts[i].m_sName, contacts[i+1].m_sName)
```

Ser lite underligt ut? är det en funktion som ska in där? Typ:

```
if(comp(contacts[i].m_sName, contacts[i+1].m_sName))
```

Det är iaf lite fel i if-blocket, du kopierar värden från  *till tmp som kopieras till \[i+1\]...

Generellt ska  *byta plats med \[i+1\] om \[i+1\] ska vara före *.

Hoppas ovanstående får dig i rätt riktning utan att lösa uppgiften åt dig...***

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

## #3 — SilvioF, 2010-06-10T07:54Z

Oops..
Jag skrev visst lite fel där.

if-satsen skall se ut som följer: 

```
if(contacts[i].m_sName.CompareNoCase(contacts[i+1].m_sName))
```

Dock så uppstår det problem när den triggrar. Alla element i min array (contacts\[\]) ersätts med värdet från första elementet.

Någon som ser var felet kan ligga?

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

## #4 — Ledel, 2010-06-10T08:34Z

Ja. Läser du din if-sats ser du att du gör följande:

1. Spara det på plats "i" till "temp"
2. Tryck nu in det du har i "temp" på "i+1"
3. Och så vidare

Det här är alltså en funktion för att kopiera värdet till i+1. Följande bör fungera bättre (ej testad dock):

```
int N = contacts.GetSize();
for (int iter = 0; iter < N-1; iter++)
{
	for (int i = 0; i < N-1; i++)
	{
		if (contacts[i].m_sName.CompareNoCase(contacts[i + 1].m_sName))
		{
			CString tmp_sName = contacts[i].m_sName;
			contacts[i].m_sName = contacts[i + 1].m_sName;
			contacts[i + 1].m_sName = tmp_sName;

			CString tmp_sAddress = contacts[i].m_sAddress;
			contacts[i].m_sAddress =contacts[i + 1].m_sAddress;
			contacts[i + 1].m_sAddress = tmp_sAddress;

			CString tmp_sPhone = contacts[i].m_sPhone;
			contacts[i].m_sPhone = contacts[i + 1].m_sPhone;
			contacts[i + 1].m_sPhone = tmp_sPhone;

			CString tmp_sEmail = contacts[i].m_sEmail;
			contacts[i].m_sEmail = contacts[i + 1].m_sEmail;
			contacts[i + 1].m_sEmail = tmp_sEmail;

			CString tmp_sNotes = contacts[i].m_sNotes;
			contacts[i].m_sNotes = contacts[i + 1].m_sNotes;
			contacts[i + 1].m_sNotes = tmp_sNotes;
		}
	}
}
```

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

## #5 — SilvioF, 2010-06-10T09:01Z

Hmm.. Det är lätt att stirra sig blind på sin egen kod tydligen.  :p

Tackar för hjälpen, nu har jag kommit vidare.  :)

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

## #6 — msossna, 2010-06-10T14:42Z

> **[SilvioF skrev:](https://www.webforum.nu/p/1507120)**
>
> Hmm.. Det är lätt att stirra sig blind på sin egen kod tydligen.  :p

Allt för enkelt....

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

---

Tråden på webben: https://www.webforum.nu/amne/c-cpp/183744-sortera-carray
