Answered step by step
Verified Expert Solution
Question
1 Approved Answer
Using C, The program must support the following command-line arguments -c: ignores the case when finding the pattern string. //ignore_the_case -f: prints out the index
Using C, The program must support the following command-line arguments -c: ignores the case when finding the pattern string. //ignore_the_case -f: prints out the index of the first occurrence of pattern string in each line. //first_occurrence_element Please do not delete any lines of code already written. ./find -f -c apples Yummy Apples //the case of A would be ignored with the ignore_the_case function John Likes apples The output would be: @6 Yummy Apples @11 John Likes apples Code is as follows: #include#include #include void swap(char* arr[], int i, int j){ void* temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } char *strstr_fully_matched(char *haystack, char *needle) {//needle = "apple" char *rv; char padded_needle[strlen(needle) + 3]; padded_needle[0] = ' '; strcpy(padded_needle + 1, needle); padded_needle[strlen(needle) + 1] = ' '; padded_needle[strlen(needle) + 2] = '\0';//" apple " if (!strncmp(haystack, padded_needle + 1, strlen(needle) + 1)) { return haystack; // needle is at the beginning } if ((rv = strstr(haystack, padded_needle)) != NULL) { return rv + 1; // needle is at the middle. } padded_needle[strlen(needle) + 1] = '\0'; if ((rv = strstr(haystack, padded_needle)) != NULL && rv[strlen(padded_needle)] == '\0') { return rv + 1; // needle is at the end. } return NULL; } void book_s_qsort(char*v[], int left, int right){ int i, last; if(left >= right) return; swap(v, left, left + (right-left)/2); last = left; for(i = left+1; i <= right;i++) if(strcmp(v[i],v[left]) < 0){ swap(v, ++last, i); } swap(v, left, last); book_s_qsort(v, left, last-1); book_s_qsort(v, last+1, right); } void error(char* message){ printf("%s ", message); } char* lineptr[1000]; char* strstr_updated(char* haystack, char* needle, int match){ if(match) return strstr_fully_matched(haystack, needle); else return strstr(haystack, needle); } int main(int argc, char* argv[]){ int except = 0, number = 0, sort = 0, reverse = 0, match = 0, first_occurrence_element = 0, ignore_the_case = 0; if(argc < 2){ error("fatal error: too few arguments"); return 1; } int i = 1; while(argc != 2){ char* current_arg = argv[i++]; if(current_arg[0] != '-'){ error("fatal error: illegal CLAs"); return 2; } while(*++current_arg){ switch(*current_arg){ case 'x': case 'X': except = 1; break; case 'n': case 'N': number = 1; break; case 's': case 'S': sort = 1; break; case 'r': case 'R': reverse = 1; break; case 'f': case 'F': // for first_occurrence_element match = 1; break; case 'c': case 'C': //for ignore_the_case match = 1; break; case 'm': case 'M': match = 1; break; default: error("fatal error: illegal option entered"); return 3; } }argc--; } char* pattern = argv[i]; printf("pattern is %s, n = %d, s = %d, r = %d, m = %d, x = %d, c= %d, f= %d ", pattern, number, sort, reverse, match, except, ignore_the_case, first_occurrence_element); if(reverse && sort){ error("fatal error: can't use -r and -s in the same execution"); return 4; } //input stream read operation... char line[1000]; i = 0; while (fgets(line, 1000, stdin)) { if(line[strlen(line) - 1] == ' ') line[strlen(line) - 1] = '\0';//drop the new line lineptr[i++] = strdup(line);//malloc to allocate space in heap and strcpy to copy line to heap }//i represents the no of sentences input by the user if(!sort && !reverse){ for(int j = 0; j < i; j++){ char* result = strstr_updated(lineptr[j], pattern, match); char* line_no = (char*) malloc(10); sprintf(line_no, "%d. ", (j+1)); //if pattern is found and -x doesn't exist //or if pattern is missing and -x exists //then print the line in the output if(result && !except || !result && except) printf("%s%s ", number? line_no:"", lineptr[j]); } }else if(sort){ book_s_qsort(lineptr, 0, i - 1); for(int j = 0; j < i; j++){ char* result = strstr_updated(lineptr[j], pattern, match); char* line_no = (char*) malloc(10); sprintf(line_no, "%d. ", (j+1)); if(result && !except || !result && except) printf("%s%s ", number? line_no:"", lineptr[j]); } }else{//reversed code not included can ignore }
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started