Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

Exercise 2. (50 points) DIY String Functions In this assignment, we will implement five string functions ourselves. The five functions to implement are strcat, strstr,

Exercise 2. (50 points) DIY String Functions In this assignment, we will implement five string functions ourselves. The five functions to implement are strcat, strstr, strchr, strdup, and streq. Documentation for each function is provided in strfuncs.c. Some of these functions already have implementations in C; These functions are not allowed for this assignment! We must implement each of these functions without using any built-in string functions. Any use of built-in string functions will result in no credit for this assignment. Once we have implemented these five functions, we should also add some code to the main function to free any memory our functions may have allocated when invoked. Add this code at the end of the function under the relevant comment. Valgrind should not report any errors or memory leaks! A quick start guide for Valgrind can be found at http://valgrind.org/docs/manual/quick-start.html

#include #include

//You might need the below function //This function returns the length of a string //It is equivlent to strlen() in string.h

int lenstr(char* s) { int len = 0; while(s[len++] != '\0'); return len-1; }

/** Appends the src string to the end of the * dest string. Return the resulting string. */

char* strcat(char dest[], char src[]) { //Add your code here

}

/** Searches the haystack string for the needle * substring. Return a pointer to the located * needle substring in the haystack string if * it exists (and the first if there are more * than one), or NULL if the needle is not in * the haystack. */

char* strstr(char haystack[], char needle[]) {

//Add your code here

}

/** Searches for the first occurrence of the * character c in the string s and returns a * pointer to it. If c does not appear in s, * return NULL. */

char* str_chr(char s[], char c) {

//Add your code here

}

/** Returns a pointer to a new string which is * a copy of the given string s. */

char* strdup(char s[]) { //Add your code here

}

/** Returns 1 if the strings s1 and s2 are the * same, returns 0 otherwise. */

int streq(char s1[], char s2[]) { //Add your code here

}

/** Main function. Add code to free allocated memory! * Valgrind should NOT yield any errors once you're done! * DO NOT CHANGE OUTPUTS! JUST ADD CLEAN UP CODE! */ int main(int argc, char** argv) { /* Read strings from program arguments */ if(argc != 3) { printf("usage: ./strfuncs s1 s2 "); return 1; } char* s1 = argv[1]; char* s2 = argv[2]; printf("String 1: %s ", s1); printf("String 2: %s ", s2); /* Check for string equality */ int s1eqs2 = streq(s1, s2); printf("s1=s2? %s ", s1eqs2 ? "yes" : "no"); /* Concatenate s1 to s2 and s2 to s1 */ char* s1s2 = strcat(s1, s2); char* s2s1 = strcat(s2, s1); printf("s1+s2=%s ", s1s2); printf("s2+s1=%s ", s2s1); /* Check for substrings */ char* s1ins2 = strstr(s2, s1); char* s2ins1 = strstr(s1, s2); printf("s1 in s2 -> %s ", s1ins2 == NULL ? "no" : "yes"); printf("s2 in s1 -> %s ", s2ins1 == NULL ? "no" : "yes"); /* Check for character occurence */ char* ains1 = str_chr(s1, 'a'); printf("'a' in s1? %s ", ains1 == NULL ? "no" : "yes"); /* Check duplication of strings */ char* dups1 = strdup(s1); printf("dup(s1)=%s ", dups1); /* Clean up, i.e. free memory! */ //Add your code here

/* Done! */ return 0; }

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access with AI-Powered Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Students also viewed these Databases questions