======String Handling Library====== John T. Rine\\ Discrete Structures\\ Fall 2011\\ \\ My library is available at:\\ http://lab46.corning-cc.edu/~jr018429/Library.zip\\ \\ The Discrete group to which I belong has a Wiki page is located at:\\ http://lab46.corning-cc.edu/notes/discrete/setman\\ \\ My library is composed of the following functions:\\ \\ **int cntChars(char *)**\\ The function cntChars takes as its parameter a character pointer (the base address of a character array, a string, and returns the number of characters in the string up to the maximum size of an integer).\\ Example code:\\ //John T. Rine //September 23, 2011 #include #include "jr.h" int main(int argc, char **argv) { char myString[]="John Rine"; printf("%s\n", myString); printf("The number of character in my string is %d\n", cntChars(myString)); return 0; } Output:\\ lab46:~/Library$ ./cntChars Please enter a string between 1 and 250 characters long John Rine The number of capital characters in your string is: 2 The number of lower case characters in your string is: 6 The number of number characters in your string is: 2 lab46:~/Library$ \\ **char *append(char, char *)**\\ The function append takes as function parameters a character to append, and a character pointer (the base address of a character array, a string). append returns a pointer to a string which is composed of the original string with the character supplied as a parameter appended to the end.\\ Example code:\\ //John T. Rine //September 23, 2011 #include #include #include "jr.h" int main(int argc, char **argv) { char temp; char *ptrChar; if (argc == 1) printf("Should be at least one command line argument supplied after the file name\n"); else { //only appends to first argument after filename printf("Enter a character to append to the string supplied on the command line\n"); temp = getchar(); printf("%s\n", ptrChar = append(temp, *(argv + 1))); free(ptrChar); } return(0); } Output:\\ lab46:~/Library$ ./appendL Joh Enter a character to append to the string supplied on the command line n John lab46:~/Library$ \\ **char *prepend(char, char *)**\\ The function prepend takes as function parameters a character to prepend, and a character pointer (the base address of a character array, a string). prepend returns a pointer to a string which is composed of the original string with the character supplied as a parameter prepended to the beginning of the string.\\ Example code:\\ //John T. Rine //September 23, 2011 #include #include #include "jr.h" int main(int argc, char **argv) { char temp; char *ptrChar; if (argc == 1) printf("Should be at least one command line argument supplied after the file name\n"); else { printf("Enter a character to prepend to the string supplied on the command line\n"); temp = getchar(); printf("%s\n", ptrChar = prepend(temp, *(argv + 1))); free(ptrChar); } return(0); } Output:\\ lab46:~/Library$ ./appendL Joh Enter a character to append to the string supplied on the command line n John lab46:~/Library$ ./prependL ine Enter a character to prepend to the string supplied on the command line R Rine lab46:~/Library$ \\ **int occurrences(char *, char)**\\ The function occurrences takes as function parameters a character and a character pointer (the base address of a character array, a string). occurences returns the number of times a particular character occurs in a string up to the maximum size of a integer.\\ Example code:\\ //John T. Rine //September 23, 2011 #include #include "jr.h" int main(int argc, char **argv) { char c; int check; if (argc == 1) printf("Should be at least one command line argument supplied after the file name\n"); else { printf("Enter a character to search the string\n"); c = getchar(); printf("Number of occurrences of %c within the string is %d\n", c, occurrences(*(argv + 1), c)); } return 0; } Output:\\ lab46:~/Library$ ./occurrencesL "John Thomas Rine" Enter a character to search the string n Number of occurrences of n within the string is 2 lab46:~/Library$ \\ **int find(char *, char)**\\ The function find takes as function parameters a character and a character pointer (the base address of a character array, a string). find returns the first position in the string supplied as a parameter up to the maximum size of an integer.\\ Example code:\\ //John T. Rine //September 23, 2011 #include #include "jr.h" int main(int argc, char **argv) { char c; int check; if (argc == 1) printf("Should be at least one command line argument supplied after the file name\n"); else { printf("Enter a character to search the string\n"); c = getchar(); check = find(*(argv + 1), c); if (check != -1) printf("First position of the character within the string is %d\n", check); else printf("Character not found\n"); } return 0; } Output:\\ lab46:~/Library$ ./findL Should be at least one command line argument supplied after the file name lab46:~/Library$ ./findL "Four score and seven years ago" Enter a character to search the string s First position of the character within the string is 5 lab46:~/Library$ \\ **char *insert(char, char *, int)**\\ The function insert takes as its function parameters a character and a character pointer (the base address of a character array, a string) and an integer representing the position in the string where the character is to be inserted. insert returns a pointer to a string which is composed of the original string with the character supplied as a parameter inserted at the position parameter.\\ Example code:\\ //John T. Rine //September 23, 2011 #include #include #include "jr.h" int main(int argc, char **argv) { char temp = 127, temp2; int number; char *ptrChar; int count; if (argc == 1) printf("Should be at least one command line argument supplied after the file name\n"); else { printf("Enter a character to insert into the string supplied on the command line\n"); temp = getchar(); getchar(); //flush!!! printf("Enter a number representing the position in which to place the character\n"); temp2 = getchar(); getchar(); //flush!!! number = temp2 - 48; printf("%s\n", ptrChar = insert(temp, *(argv + 1), number)); free(ptrChar); } return(0); } Output:\\ lab46:~/Library$ ./insertL "John homas" Enter a character to insert into the string supplied on the command line T Enter a number representing the position in which to place the character 5 John Thomas lab46:~/Library$ \\ **char *concat(char *, char *)**\\ The function concat takes as its function parameters two character pointers (the base addresses of a character arrays-strings). concat returns a character pointer to a string composed of the second string concatenated to the first, that is it tacks the second string has been tacked onto the end of the first.\\ Example code:\\ //John T. Rine //September 23, 2011 #include #include #include "jr.h" int main(int argc, char **argv) { char *ptrString; printf("%s\n", ptrString = concat(*(argv + 1), *(argv + 2))); free(ptrString); return 0; } Output:\\ lab46:~/Library$ ./concatL "John Thomas" " Rine" John Thomas Rine lab46:~/Library$ \\ **char *toLower(char *)**\\ The function toLower takes as its function parameter a character pointer (the base address of a character array, a string). It returns a character pointer to a string whose letters have been converted to lower case.\\ Example code:\\ #include #include #include "jr.h" int main(int argc, char **argv) { char temp; char *ptrChar; if (argc != 2) printf("Should be one command line argument supplied after the file name\n"); else { printf("%s\n", ptrChar = toLower(*(argv + 1))); free(ptrChar); } return 0; } Output:\\ lab46:~/Library$ ./toLowerL "JoHn thOmas rInE" john thomas rine lab46:~/Library$ \\ **char *toUpper(char *)**\\ The function toUpper takes as its function parameter a character pointer (the base address of a character array, a string). It returns a character pointer to a string whose letters have been converted to upper case.\\ Example code:\\ #include #include #include "jr.h" int main(int argc, char **argv) { char temp; char *ptrChar; if (argc != 2) printf("Should be one command line argument supplied after the file name\n"); else { printf("%s\n", ptrChar = toUpper(*(argv + 1))); free(ptrChar); } return 0; } Output:\\ lab46:~/Library$ ./toUpperL "jOhN rInE" JOHN RINE lab46:~/Library$ \\ //jr.h //John T. Rine //September 23, 2011 #ifndef _JRLIB_H #define _JRLIB_H int cntChars(char *); char *append(char, char *); char *prepend(char, char *); int occurrences(char *, char); int find(char *, char); char *insert(char, char *, int); char * concat(char *, char *); char *toLower(char *); char *toUpper(char *); #endif \\ //jr.c //John T. Rine //September 23, 2011 //lab46:~$ gcc -c jr.c -o jr.o //lab46:~$ ar crs libjr.a jr.o //lab46:~$ gcc -I. testStrings.c -o testStrings libjr.a #include #include int cntChars(char *inputString) { // returned value "count" does not include '\0' int count = 0; while(*(inputString + count) != '\0') ++count; return(count); } char *append(char inputChar, char *inputString) { //element 0 1 2 //count = 0 '\0' //count = 1 A '\0' //count = 2 M y '\0' int count, i; char * pChar; count = cntChars(inputString); if (!(pChar = (char *) malloc(sizeof(char) * (count + 2)))) { fprintf(stderr,"Insufficient memory"); exit(1); } else { for(i = 0; i <= (count - 1); i++) *(pChar + i) = *(inputString + i); *(pChar + count) = inputChar; if(inputChar != '\0') *(pChar + count + 1) = '\0'; return(pChar); } } char *prepend(char inputChar, char *inputString) { //element 0 1 2 //count = 0 '\0' //count = 1 A '\0' //count = 2 M y '\0' int count, i; char * pChar; count = cntChars(inputString); if (!(pChar = (char *) malloc(sizeof(char) * (count + 2)))) { fprintf(stderr,"Insufficient memory"); exit(1); } else { *pChar = inputChar; for(i = 1; i <= (count + 1); i++) *(pChar + i) = *(inputString + i - 1); return(pChar); } } int occurrences(char *inputString, char c) { int i = 0; int r = 0; while (*(inputString + i) != '\0') { if(*(inputString + i) == c) r++; i++; } return r; } int find(char *inputString, char c) { int i = 0; int r = -1; while (*(inputString + i) != '\0') { if(*(inputString + i) == c) { r = i; break; } i++; } return r; } char *insert(char inputChar, char *inputString, int position) { //element 0 1 2 //count = 0 '\0' //count = 1 A '\0' //count = 2 M y '\0' int count, i; char * pChar; count = cntChars(inputString); if (!(pChar = (char *) malloc(sizeof(char) * (count + 2)))) { fprintf(stderr,"Insufficient memory"); exit(1); } else { i = 0; while(i <= (count + 1)) { if(i < position) *(pChar + i) = *(inputString + i); else if (i == position) *(pChar + i) = inputChar; else *(pChar + i) = *(inputString + i - 1); i++; } return(pChar); } } char * concat(char *s1, char *s2) { char *r = NULL; int count = 0; int countTotal = 0; int i; int j = 0; count = cntChars(s1); countTotal = count + cntChars(s2); if(!(r = (char *) malloc(sizeof(char) * (countTotal + 1)))) { fprintf(stderr,"Insufficient memory"); exit(1); } else { for(i = 0 ; i < count; i++) *(r + i) = *(s1 + i); while(i < countTotal) { *(r + i) = *(s2 + j); j++; i++; } *(r + countTotal) = '\0'; return r; } } char *toLower(char *inputString) { int count, i; char * pChar; count = cntChars(inputString); if (!(pChar = (char *) malloc(sizeof(char) * (count + 1)))) { fprintf(stderr,"Insufficient memory"); exit(1); } else { for(i = 0; i <= count; i++) { if(*(inputString + i) >= 'A' && *(inputString + i) <= 'Z') *(pChar + i) = *(inputString + i) + 32; else *(pChar + i) = *(inputString + i); } return(pChar); } } char *toUpper(char *inputString) { int count, i; char * pChar; count = cntChars(inputString); if (!(pChar = (char *) malloc(sizeof(char) * (count + 1)))) { fprintf(stderr,"Insufficient memory"); exit(1); } else { for(i = 0; i <= count; i++) { if(*(inputString + i) >= 'a' && *(inputString + i) <= 'z') *(pChar + i) = *(inputString + i) - 32; else *(pChar + i) = *(inputString + i); } return(pChar); } }