sort list by case independent grade

so i have a complete program but my void function to sort grade is case dependent instead of independent what do i need to change to make it case independent? list and code done using pointers in c++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
course* sortByGrade(course* head)
	{
		course* newHead = 0;
		course* oldHead = head;

		while (oldHead)
		{
			course* a = oldHead;
			oldHead = oldHead->next;
			course* x, *prev;

			for (x = newHead, prev = 0; x; prev = x, x = x->next)
			{
				if (a->grade < x->grade)
				break;
			} 

			a->next = x;

			if (prev)
				prev->next = a;

			else
				newHead = a;
		} 
			return newHead;
	} 
I assume that the grade is a char type.
You can use tolower() or toupper() from <cctype> header to compare them in same cases: if (tolower(a->grade) < tolower(x->grade))
ok so this is the class struct
1
2
3
4
5
6
7
8
9
class course
	{
		public:
		char className[11]; // Class designation
		char term[7]; // Term
		int units; // Units
		char grade; // Grade
		course* next; // Next node
	};

and i have to sort the units low to high the grade sort by case independent grade (starting with 'A'), sort classname independently alphabetically and finally sort list term by compare function this is what i have?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
course* sortByUnit(course* head)
	{
		course* newHead = 0;
		course* oldHead = head;

		while(oldHead)
		{
			course* a = oldHead;
			oldHead = oldHead->next;

			course* x, *prev;

			for (x = newHead, prev = 0; x; prev = x, x = x->next)
			{
				if (a->units < x->units)
				break;
			}
		 
			a->next = x;

			if (prev)
				prev->next = a;
			else
				newHead = a;
		}
		return newHead;
	} 

	course* sortByGrade(course* head)
	{
		course* newHead = 0;
		course* oldHead = head;

		while (oldHead)
		{
			course* a = oldHead;
			oldHead = oldHead->next;
			course* x, *prev;

			for (x = newHead, prev = 0; x; prev = x, x = x->next)
			{
				if (tolower(a->grade) < tolower(x->grade))
				break;
			} 

			a->next = x;

			if (prev)
				prev->next = a;

			else
				newHead = a;
		} 
			return newHead;
	} 

	course* sortByDescription(course* head)
	{
		course* newHead = 0;
		course* oldHead = head;

		while (oldHead)
		{
			course* a = oldHead;
			oldHead = oldHead->next;
			course* x, *prev;

			for (x = newHead, prev = 0; x; prev = x, x = x->next)
			{
				if (strcmp(a->className, x->className) < 0)
				break;
			}

			a->next = x;
			if (prev)
				prev->next = a;
			else
				newHead = a;
		} 
		
		return newHead;
	}

	course* sortByTerm(course* head)
	{
		course* newHead = 0;
		course* oldHead = head;

		while (oldHead)
		{
			course* a = oldHead;
			oldHead = oldHead->next;
			course* x, *prev;

			for (x = newHead, prev = 0; x; prev = x, x = x->next)
			{
				if (courseCmp(a, x) < 0)
				break;
			} 

			a->next = x;
			if (prev)
				prev->next = a;
			else
				newHead = a;
		} 
			return newHead;
	} 
	
Topic archived. No new replies allowed.