From 0a237cbc374ea71ce5c13f3c93e57f7d131f71de Mon Sep 17 00:00:00 2001 From: Ansh <anshbhajjan@gmail.com> Date: Sun, 19 Jan 2025 23:48:04 -0500 Subject: [PATCH] assignment 1 done, i'm so tired --- assignments/assignment-1/starter/stringfun | Bin 0 -> 20960 bytes assignments/assignment-1/starter/stringfun.c | 220 ++++++++++++++++++- 2 files changed, 215 insertions(+), 5 deletions(-) create mode 100755 assignments/assignment-1/starter/stringfun diff --git a/assignments/assignment-1/starter/stringfun b/assignments/assignment-1/starter/stringfun new file mode 100755 index 0000000000000000000000000000000000000000..bef77fbfd58283f303089b1b55b44ac8b7ca55f3 GIT binary patch literal 20960 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 literal 0 HcmV?d00001 diff --git a/assignments/assignment-1/starter/stringfun.c b/assignments/assignment-1/starter/stringfun.c index 1020f7e..3471e29 100644 --- a/assignments/assignment-1/starter/stringfun.c +++ b/assignments/assignment-1/starter/stringfun.c @@ -12,12 +12,71 @@ int setup_buff(char *, char *, int); //prototypes for functions to handle required functionality int count_words(char *, int, int); -//add additional prototypes here +//add additional prototypes here +void word_print(char *buff, int len); +void reverse_print(char *buff, int len); int setup_buff(char *buff, char *user_str, int len){ //TODO: #4: Implement the setup buff as per the directions - return 0; //for now just so the code compiles. + // Calculate the length of the string the user put into the program + int user_str_length = 0; + char *temp_str = user_str; + + // Iterate through the string to find the null terminator so we can see how long the string is + while (*temp_str != '\0') { + user_str_length++; + temp_str++; + } + + // Return an error code if the inputted string is bigger than the buffer size + if (user_str_length > len) { + fprintf(stderr, "The input string you gave is too long\n"); + return(-1); + } + + // Initialize pointers + char *buff_ptr = buff; + char *user_str_ptr = user_str; + int consec_spaces = 0; + + // Go through the string and copy the characters to the buffer + while (*user_str_ptr != '\0') { + + char current_char = *user_str_ptr; + + // Check to see if the current character is a space or a tab + if (current_char == ' ' || current_char == '\t') { + + // This will add a single space if it's not a consecutive whitespace + if (!consec_spaces && buff_ptr != buff) { + *buff_ptr = ' '; + buff_ptr++; + } + + // Set the flag for the consecutive spaces + consec_spaces = 1; + + } + // Copy the character to the buffer, move the buffer pointer to the next position, and reset the consecutive space flag + else { + *buff_ptr = current_char; + buff_ptr++; + consec_spaces = 0; + } + + // Move to the next character in the user string + user_str_ptr++; + } + + // Fill the remaining buffer spaces with . + while (buff_ptr < buff + len) { + *buff_ptr = '.'; + buff_ptr++; + } + + // Return the length of the user string + return user_str_length; } void print_buff(char *buff, int len){ @@ -34,12 +93,117 @@ void usage(char *exename){ } int count_words(char *buff, int len, int str_len){ - //YOU MUST IMPLEMENT - return 0; + // Check to make sure the user string is larger than the buffer size + if (str_len > len) { + printf("User input is larger than the buffer size.\n"); + return -3; + } + + // Initialize counters for words and a flag to tell if we're in a word + int word_count = 0; + int in_a_word = 0; + + // Iterate through the buffer until we reach the end of the user string + for (int i = 0; i < str_len; i++) { + + // Get the currect character from the buffer + char current_char = *(buff + i); + + // Check if the current character is a space or tab + if (current_char == ' ' || current_char == '\t') { + // Reset in a word flag if it's a space or tab + in_a_word = 0; + } + else { + // If we weren't in a word and we see a non-whitespace character, start a new word and increment the word count + if (in_a_word == 0) { + word_count++; + } + + // Set the flag to indicate we are inside a word + in_a_word = 1; + } + } + + // Print the final word count and return the word count + printf("Word Count: %d\n", word_count); + return word_count; } //ADD OTHER HELPER FUNCTIONS HERE FOR OTHER REQUIRED PROGRAM OPTIONS +void word_print(char *buff, int len) { + // Initial prints to set up the format + printf("Word Print\n"); + printf("----------\n"); + + // Initialize variables and pointers for the start of the current word, length of the current word, and the count for the number of words + char *start_of_word = NULL; + int word_length = 0; + int word_count = 1; + + // Iterate over each character in the buffer + for (int i = 0; i < len; i++) { + // Check if the current character is actually a character + if(*(buff + i) != ' ' && *(buff + i) != '.' && *(buff + i) != '\0') { + // Mark the start of the word + if (start_of_word == NULL) { + start_of_word = buff + i; + } + // Increment the word length because we're inside a word + word_length++; + } + + // If we encounter non-character and we're currently inside of a word + else if (start_of_word != NULL) { + // Print the word count and the word itself + printf("%d. ", word_count++); + + // Print the characters of the current word + for (int j = 0; j < word_length; j++) { + printf("%c", *(start_of_word + j)); + } + + // Print the length of the word + printf(" (%d)\n", word_length); + + // Reset for the next word + start_of_word = NULL; + word_length = 0; + } + } + + // If the loop ends and there's still a word being processed, print the word + if (start_of_word != NULL) { + printf("%d. ", word_count); + + for (int j = 0; j < word_length; j++) { + printf("%c", *(start_of_word + j)); + } + + printf(" (%d)\n", word_length); + } +} + +void reverse_print(char *buff, int len) { + // Give an error message if the buffer length is 0 (there's no word) + if (len == 0) { + printf("Error: The string you put in is empty and we can't reverse it\n"); + exit(3); + } + + // Initial print to setup the format + printf("Reversed String: "); + + // Loop through the buffer starting from the last character moving backwards and printing it so it prints in reverse + for (int i = len - 1; i >= 0; i--) { + printf("%c", *(buff + i)); + } + + // Prints a new line after reversing + printf("\n"); +} + int main(int argc, char *argv[]){ char *buff; //placehoder for the internal buffer @@ -50,6 +214,15 @@ int main(int argc, char *argv[]){ //TODO: #1. WHY IS THIS SAFE, aka what if arv[1] does not exist? // PLACE A COMMENT BLOCK HERE EXPLAINING + /* + * The reason that this if statement is safe is because it checks to see how many command line arguments there are before trying to access them. + * If there are less than 2 command line arguments, that means that the command is incomplete, so when we go to access it, there might be unintended behavior that we may not have accounted for. + * Since the program checks before accessing it, it will exit the command before we even try to use it, so that unintended behavior will never happen. + * If there are 2 or more arguments though, it will make sure that the 2nd command line input has a - in it, as that is what is used to call the different functions. + * If it doesn't, it will follow the same fate as if you don't have 2 or more command line arguments. + * It will exit the program with a command line failure code. + */ + if ((argc < 2) || (*argv[1] != '-')){ usage(argv[0]); exit(1); @@ -67,6 +240,11 @@ int main(int argc, char *argv[]){ //TODO: #2 Document the purpose of the if statement below // PLACE A COMMENT BLOCK HERE EXPLAINING + /* + * This is the same thing as the previous TODO if statement, except this will run after the first check already happens. + * If there are 2 or more command line arguments, and the 2nd one has a - in it, then it will check to see if there are 3 command line arguments. + * This check is to make sure taht there is a sample string passed along. If there isn't, it will exit with code 1 to indicate a command line error. + */ if (argc < 3){ usage(argv[0]); exit(1); @@ -78,7 +256,15 @@ int main(int argc, char *argv[]){ // handle error if malloc fails by exiting with a // return code of 99 // CODE GOES HERE FOR #3 + + buff = (char *)malloc(BUFFER_SZ); + // Check to make sure the malloc worked properly + + if(buff == NULL) { + fprintf(stderr, "Memory allocation failure\n"); + exit(99); + } user_str_len = setup_buff(buff, input_string, BUFFER_SZ); //see todos if (user_str_len < 0){ @@ -98,13 +284,30 @@ int main(int argc, char *argv[]){ //TODO: #5 Implement the other cases for 'r' and 'w' by extending // the case statement options + + // Call reverse_print when user inputs -r + case 'r': + reverse_print(buff, user_str_len); + break; + + // Call word_print when user inputs -w + case 'w': + word_print(buff, user_str_len); + break; + default: usage(argv[0]); exit(1); } //TODO: #6 Dont forget to free your buffer before exiting + + // Print the entire buffer after a user inputs the command line argument call print_buff(buff,BUFFER_SZ); + + // Free memory + free(buff); + exit(0); } @@ -114,4 +317,11 @@ int main(int argc, char *argv[]){ // is a good practice, after all we know from main() that // the buff variable will have exactly 50 bytes? // -// PLACE YOUR ANSWER HERE \ No newline at end of file +// PLACE YOUR ANSWER HERE +// + +/* + * Since we are giving the functions both the buffer and the length of it, it lets us have it just incase we need it for error preventions. + * You could use the length of the buffer to double check that the length of the user string is still within range of the buffer, just incase anything happened to it from when we first checked it to the function. + * For example, if we decide to change the buffer size to something more flexible, it will be sent out to all the functions to again, check to make sure that it still fits. +*/ -- GitLab