#include using namespace std; void callback(char command, char arg, int parsed_number) { cout << "command: " << command << " | "; cout << "arg: " << arg << " | "; cout << "parsed_number: " << parsed_number << " | "; cout << endl; } int parse_string(char input[]) { char current_char = input[0]; char command = ' '; char arg = ' '; char current_number_string[4] = {' ', ' ', ' ', '\0'}; int line_position = 0; int total_position = 0; int current_number_len = 0; int parsed_number = 0; while (current_char != '\0') { if (line_position == 0) { switch (current_char) { case 'f': case 't': case 'b': command = current_char; break; default: cout << "invalid command. " << endl; return 1; } } else { switch (current_char) { case '0' ... '9': if (current_number_len < 4) { current_number_len++; current_number_string[current_number_len - 1] = current_char; } break; case 'r': case 'g': case 'b': case 't': arg = current_char; break; case ' ': if (current_number_len > 0) parsed_number = stoi(current_number_string); if (arg != ' ') callback(command, arg, parsed_number); arg = ' '; current_number_len = 0; fill(begin(current_number_string), end(current_number_string), ' '); current_number_string[3] = '\0'; break; case '\n': if (current_number_len > 0) parsed_number = stoi(current_number_string); callback(command, arg, parsed_number); command = arg = ' '; line_position = parsed_number = current_number_len = 0; fill(begin(current_number_string), end(current_number_string), ' '); current_number_string[3] = '\0'; break; default: cout << "invalid syntax." << endl; return 1; } } if (current_char != '\n') line_position++; total_position++; current_char = input[total_position]; } line_position = 0; return 0; }