-
Notifications
You must be signed in to change notification settings - Fork 0
/
functions.c
131 lines (105 loc) · 3.17 KB
/
functions.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
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
//
// Created by j on 1/27/18.
//
#include "functions.h"
#include "operations.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
char **str_split(char *a_str, const char a_delim) {
char **result = 0;
size_t count = 0;
char *tmp = a_str;
char *last_comma = 0;
char delim[2];
delim[0] = a_delim;
delim[1] = 0;
/* Count how many elements will be extracted. */
while (*tmp) {
if (a_delim == *tmp) {
count++;
last_comma = tmp;
}
tmp++;
}
/* Add space for trailing token. */
count += last_comma < (a_str + strlen(a_str) - 1);
/* Add space for terminating null string so caller
knows where the list of returned strings ends. */
count++;
result = malloc(sizeof(char *) * count);
if (result) {
size_t idx = 0;
char *token = strtok(a_str, delim);
while (token) {
assert(idx < count);
*(result + idx++) = strdup(token);
token = strtok(0, delim);
}
assert(idx == count - 1);
*(result + idx) = 0;
}
return result;
}
char *pickOneOperation(char **pString, int messageSize) {
printf("Operation sign => [%s]\n", *pString);
int i;
struct element *nextForOperation = NULL;
char *bufferToSend = malloc(1024);
for (i = 1; i < messageSize; i++) {
struct element *tmpElement = (struct element *) malloc(sizeof(struct element));
tmpElement->goodThing = atof(pString[i]);
tmpElement->next = nextForOperation;
nextForOperation = tmpElement;
}
if (strcmp(pString[0], "+") == 0) {
double result = addition(nextForOperation);
printf("Result = %f\n", result);
sprintf(bufferToSend, "%d", (int) result);
} else if (strcmp(pString[0], "-") == 0) {
double result = substracion(nextForOperation);
printf("Result = %f\n", result);
sprintf(bufferToSend, "%d", (int) result);
} else if (strcmp(pString[0], ">") == 0) {
ascendingSorting(nextForOperation);
printList(nextForOperation);
bufferToSend = splitListAgain(nextForOperation);
} else if (strcmp(pString[0], "<") == 0) {
descendingSotring(nextForOperation);
printList(nextForOperation);
bufferToSend = splitListAgain(nextForOperation);
} else {
bufferToSend = "WRONG INPUT";
}
return bufferToSend;
}
int getMessageSize(char **pString) {
int size = 0;
if (!pString) return 0;
while (*(pString + size) != NULL) {
size++;
}
return size;
}
char *splitListAgain(struct element *el) {
struct element *tmp = el;
char *output = malloc(1024);
while (tmp != NULL) {
char tempBuff[sizeof(double)];
sprintf(tempBuff, "%.2f", tmp->goodThing);
strcat(tempBuff, " ");
strcat(output, tempBuff);
tmp = tmp->next;
}
return output;
}
/* Function to print nodes in a given linked list */
void printList(struct element *start) {
struct element *temp = start;
printf("\nLinked list elements:\n");
while (temp != NULL) {
printf("%0.2f ", temp->goodThing);
temp = temp->next;
}
}