#include <stdio.h>
#include <string.h>
//Function declarations
void promptchoice_main(void);
void promptchoice_main_again(void);
void promptinput(void);
void promptchoice_trim(void);
void executechoice(char choice_trim);
void trimnumbers(void);
void trimwhitespace(void);
void trimletters(void);
void trimspecial(void);
void specifyspecial(void);
void printresult(char input[]);
//Global variables
char choice_main = 0x00;
char choice_trim = 0x00;
char choice_detail = 0x00;
char choice_special = 0x00;
char input[1000] = "";
char previous_input[1000] = "";
//Remove specific numbers, letters, punctuation or whitespace characters from input.
int main() {
printf("\nWelcome! This program trims text by removing unwanted characters.\n");
while (1) {
if (strlen(previous_input) == 0) { // Check for previously trimmed text in memory.
promptchoice_main();
if (choice_main == 'E') { break; }
if (choice_main == 'T') {
promptinput();
promptchoice_trim();
executechoice(choice_trim);
printresult(input);
}
}
else {
promptchoice_main_again();
if (choice_main == 'E') { break; }
if (choice_main == 'T') {
promptinput();
promptchoice_trim();
executechoice(choice_trim);
printresult(input);
}
else if (choice_main == 'P') {
sprintf(input, "%s", previous_input);
printf("\nYou are trimming previously trimmed text: %s\n", input);
promptchoice_trim();
executechoice(choice_trim);
printresult(input);
}
}
}
printf("\nGoodbye!\n");
return 0;
}
//Function definitions
void promptchoice_main(void) {
while (1) {
printf("\nPress T and ENTER to trim text or E and ENTER to exit: ");
scanf("%c", &choice_main);
while (getchar() != '\n') {}
if (choice_main == 'T' || choice_main == 'E') { break; }
else { printf("\nInvalid input!\n"); }
}
return;
}
void promptchoice_main_again(void) {
while (1) {
printf("\nPress T and ENTER to trim new text, P and ENTER to trim previously trimmed text or E and ENTER to exit: ");
scanf("%c", &choice_main);
while (getchar() != '\n') {}
if (choice_main == 'T' || choice_main == 'P' || choice_main == 'E') { break; }
else { printf("\nInvalid input!\n"); }
}
return;
}
void promptinput(void) {
printf("\nEnter the text that you would like to trim and press ENTER: ");
fgets(input, sizeof input, stdin);
input[strlen(input) - 1] = '\0';
return;
}
void promptchoice_trim(void) {
while (1) {
printf("\nWhat would you like to trim?\n1) Numbers (1, 2, 3...)\n2) Whitespace (space, tab or newline) \n3) Letters (A,B,C... a,b,c...)\n4) Special characters (!,?, . , ...)\nType one of the above numbers and press ENTER: ");
scanf("%c", &choice_trim);
while (getchar() != '\n') {}
if (choice_trim >= 0x31 && choice_trim <= 0x34) { break; } // Only accept 1 through 4.
else { printf("\nInvalid choice!\n"); }
}
return;
}
void executechoice(char choice_trim) {
switch (choice_trim) {
case 0x31: trimnumbers(); // 123 etc
break;
case 0x32: trimwhitespace(); // space, tab, newline
break;
case 0x33: trimletters(); // ABC..., abc...
break;
case 0x34: trimspecial(); // ! ? , . etc.
break;
}
return;
}
void trimnumbers(void) {
int n = 0;
for (n = strlen(input) - 1; n >= 0; n--) {
if (input[n] >= 0x30 && input[n] <= 0x39) { input[n] = 0x18; }
}
return;
}
void trimwhitespace(void) {
while (1) {
printf("\nType S to trim SPACE, T to trim TAB, N to trim NEWLINE or A to trim all whitespace: ");
scanf("%c", &choice_detail);
while (getchar() != '\n') {}
if (choice_detail == 'S' || choice_detail == 'T' || choice_detail == 'A') { break; }
else { printf("\nInvalid input!\n"); }
}
int n = 0;
for (n = strlen(input) - 1; n >= 0; n--) {
if (choice_detail == 'S') { if (input[n] == 0x20) { input[n] = 0x18; } } // space
else if (choice_detail == 'T') { if (input[n] == 0x09) { input[n] = 0x18; } } // tab
else if (choice_detail == 'N') { if (input[n] == 0x0A) { input[n] = 0x18; } } // newline
else if (choice_detail == 'A') { if (input[n] == 0x20 || input[n] == 0x09 || input[n] == 0x0A) { input[n] = 0x18; } }
}
return;
}
void trimletters(void) {
while (1) {
printf("\nType U to trim uppercase letters, L to trim lowercase letters or A to trim all letters: ");
scanf("%c", &choice_detail);
while (getchar() != '\n') {}
if (choice_detail == 'U' || choice_detail == 'L' || choice_detail == 'A') { break; }
else { printf("\nInvalid input!\n"); }
}
int n = 0;
for (n = strlen(input) - 1; n >= 0; n--) {
if (choice_detail == 'U') { if (input[n] >= 0x41 && input[n] <= 0x5A) { input[n] = 0x18; } } // Uppercase
else if (choice_detail == 'L') { if (input[n] >= 0x61 && input[n] <= 0x7A ) { input[n] = 0x18; } } // Lowercase
else if (choice_detail == 'A') { if (input[n] >= 0x41 && input[n] <= 0x5A || input[n] >= 0x61 && input[n] <= 0x7A ) { input[n] = 0x18; } }
}
return;
}
void trimspecial(void) {
while (1) {
printf("\nType A to trim all special characters or S to specify which character to remove: ");
scanf("%c", &choice_detail);
while (getchar() != '\n') {}
if (choice_detail == 'A' || choice_detail == 'S') { break; }
else { printf("\nInvalid input!\n"); }
}
int n = 0;
for (n = strlen(input) - 1; n >= 0; n--) {
if (choice_detail == 'A') { if (input[n] >= 0x21 && input[n] <= 0x2F || input[n] >= 0x3A && input[n] <= 0x40 || input[n] >= 0x5B && input[n] <= 0x60 || input[n] >= 0x7B && input[n] <= 0x7E) { input[n] = 0x18; } } // All whitespace
}
if (choice_detail == 'S') { specifyspecial(); } // Let user specify character.
return;
}
void specifyspecial(void) {
while (1) {
printf("\nEnter special character to trim and press ENTER: ");
scanf("%c", &choice_special);
while (getchar() != '\n') {}
if (choice_special >= 0x21 && choice_special <= 0x2F || choice_special >= 0x3A && choice_special <= 0x40 || choice_special >= 0x5B && choice_special <= 0x60 || choice_special >= 0x7B && choice_special <= 0x7E) { break; }
else { printf("\nNot a special character!\n"); }
}
int n = 0;
for (n = strlen(input) - 1; n >= 0; n--) { if (input[n] == choice_special) { input[n] = 0x18; } }
return;
}
void printresult(char input[]) {
printf("\nTrimmed text:\n\n%s\n", input);
sprintf(previous_input, "%s", input); // Save trimmed text for reuse.
return;
}
//TODO
//Create error handling when trimming non existing characters.
//Replace characters (uppercase/lowercase, user selected, etc).