2023-09-15 23:55:52 -03:00
|
|
|
#include <stdio.h>
|
|
|
|
#include <string.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include "linked_list.h"
|
|
|
|
|
|
|
|
#define MAX_LEN 100
|
|
|
|
|
|
|
|
int main() {
|
|
|
|
Node *head = NULL;
|
|
|
|
// Double buffer to support up to 100 chars in find and replace command
|
|
|
|
char buffer[MAX_LEN * 2];
|
|
|
|
|
|
|
|
bool stopLoop = false;
|
|
|
|
while (!stopLoop) {
|
2023-09-16 02:00:05 -03:00
|
|
|
char *result = fgets(buffer, MAX_LEN * 2, stdin);
|
|
|
|
if (result == NULL) {
|
|
|
|
// If we get null, there has been an error reading from stdin
|
|
|
|
fprintf(stderr, "Error reading from stdin\n");
|
|
|
|
return EXIT_FAILURE;
|
|
|
|
}
|
2023-09-15 23:55:52 -03:00
|
|
|
buffer[strcspn(buffer, "\r\n")] = 0;
|
|
|
|
if (buffer[0] == 'a') {
|
|
|
|
buffer[MAX_LEN - 1] = '\0'; // Prevent buffer overflow
|
|
|
|
add(&head, buffer + 2);
|
|
|
|
} else if (buffer[0] == 'd') {
|
|
|
|
buffer[MAX_LEN - 1] = '\0'; // Prevent buffer overflow
|
|
|
|
delete(&head, buffer + 2);
|
|
|
|
} else if (buffer[0] == 'f') {
|
|
|
|
char *data = buffer + 2;
|
|
|
|
char input1[MAX_LEN], input2[MAX_LEN];
|
|
|
|
// sscanf assigns a null terminator to the end of the string, so don't need to do it manually
|
|
|
|
sscanf(data, "%99s %99s", input1, input2);
|
|
|
|
// Could check if the replacement was successful by using return value of function, but I don't have to
|
2023-09-19 15:38:03 -03:00
|
|
|
findAndReplace(head, input1, input2);
|
2023-09-15 23:55:52 -03:00
|
|
|
} else if (buffer[0] == 'p') {
|
2023-09-19 15:38:03 -03:00
|
|
|
printList(head);
|
2023-09-15 23:55:52 -03:00
|
|
|
} else if (buffer[0] == 's') {
|
|
|
|
stopLoop = stop(&head);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return EXIT_SUCCESS;
|
|
|
|
}
|