Question

In: Computer Science

Implement the following functions. Each function deals with null terminated C-strings. You can assume that any...

Implement the following functions. Each function deals with null terminated C-strings. You can assume that any char array passed into the functions will contain valid, null-terminated data. Your functions must have the signatures listed below.

1. This function returns the last index where the target char can be found in the string. it returns -1 if the target char does not appear in the string. For example, if s is “Giants” and target is ‘a’ the function returns 2.

int lastIndexOf(char *s, char target)

2. This function alters any string that is passed in. It should reverse the string. If “flower” gets passed in it should be reversed in place to “rewolf”. To be clear, just printing out the string in reverse order is insufficient to receive credit, you must change the actual string to be in reverse order.

void reverse(char *s)

3. This function finds all instances of the char ‘target’ in the string and replaces them with ‘replacementChar’. It also returns the number of replacements that it makes. If the target char does not appear in the string it returns 0 and does not change the string. For example, if s is “go giants”, target is ‘g’, and replacement is ‘G’, the function should change s to “Go Giants” and return 2.

int replace(char *s, char target, char replacementChar)

4. This function returns the index in string s where the substring can first be found. For example if s is “Skyscraper” and substring is “ysc” the function would return 2. It should return -1 if the substring does not appear in the string.

int findSubstring(char *s, char substring[])

5. This function returns true if the argument string is a palindrome. It returns false if it is not. A palindrome is a string that is spelled the same as its reverse. For example “abba” is a palindrome. So is “hannah”, “abc cba”, and “radar”.

bool isPalindrome(char *s)

Note: do not get confused by white space characters. They should not get any special treatment. “abc ba” is not a palindrome. It is not identical to its reverse.

6. (OPTIONAL). This function should reverse the words in a string. A word can be considered to be any characters, including punctuation, separated by spaces (only spaces, not tabs, \n etc.). So, for example, if s is “The Giants won the Pennant!” the function should change s to “Pennant! the won Giants The”

void reverseWords(char *s)

Requirements

- You may use strlen(), strcmp(), and strncpy() if you wish, but you may not use any of the other C-string library functions such as strstr(), strncat(), etc.

- You will not receive credit for solutions which use C++ string objects, you must use C-Strings (null-terminated arrays of chars) for this assignment.

Please provide a sample output. thank you.

Solutions

Expert Solution

  • Below is the detailed implementation of the above problem in C++ with code and output shown.
  • For better understanding please read the comments mentioned in the code.
  • All functions from 1 to 6 are completed in the code below and each function is tested with the user's input string, for sample input/output see the below mentioned input/output format.
  • CODE:

#include<iostream>
#include<cstring>
using namespace std;

//function 1

//it returns the last index where the target char can be found in the string, if not found then return -1
int lastIndexOf(char *s, char target){
//length of string
int n=strlen(s);
//start iterating from the last index
for(int i=n-1;i>=0;i--){
//if target character found then return index
if(s[i]==target){
return i;
}
}

//otherwise not found
return -1;
}

//function 2

//this function changes the actual string to be in reverse order.
void reverse(char *s){

//length of string
int n=strlen(s);
//keep track of two pointers one start and another end
int i=0,j=n-1;

//loop till both start and end indexes overlap
while(i<=j){

//swap the characters at i and j
char temp=s[i];
s[i]=s[j];
s[j]=temp;
//and then increment i and decrement j
i++;
j--;
}
//finally return
return;
}
//function 3

//this function find all instances of target and replaces it with replacementChar and return the total number of replacements
int replace(char *s, char target, char replacementChar){
//stores length of string
int len=strlen(s);
//stores total number of replacements done
int total=0;

//start iterating from the start on string
for(int i=0;i<len;i++){

//if we found target char then replace it with replacementChar
if(s[i]==target){
//replace
s[i]=replacementChar;
//increase total replacement by 1
total+=1;
}
}
//return total number of replacement
return total;
}
//function 4

//This function returns the index in string s where the substring can first be found.
int findSubstring(char *s, char substring[]){
//length of string s
int len1=strlen(s);
//length of substring that is to be found
int len2=strlen(substring);
//start iterating from 0th position in s till we can match a string of length len2
for(int i=0;i<len1-len2+1;i++){

//this boolean will remain true if we find a substring starting from ith position in s which is equal to substring
bool found=true;
//check each character starting from ith
for(int j=i;j<i+len2;j++){
//if equal then move forward to next character
if(s[j]==substring[j-i]){

}

//if unequal then set found to false and break from loop
else{
found=false;
break;
}
}

//if boolean found is still true then we found the substring, so return index
if(found==true){
return i;
}
}
//otherwise we reach here,
//so substring not found then return -1
return -1;
}
//function 5

//this function returns true if the argument string is a palindrome otherwise false
bool isPalindrome(char *s){
//store length of string s
int n=strlen(s);
//start one pointer from starting i.e, 0 and other from last i.e, n-1
int i=0,j=n-1;
//check characters at i and j until i and j overlaps
while(i<=j){

//if characters matched then
if(s[i]==s[j]){
i++;
j--;
}

//otherwise return false
else{
return false;
}
}
//here we reach when all characters matched the condition of palindrome so return true
return true;
}
//function 6

//This function should reverse the words in a string
void reverseWords(char *s){
//length of string s
int len=strlen(s);

//keeps track of starting index of a word
int j=0;
//iterating on the string
for(int i=0;i<len;i++){
//if space found, then we reverse the word before space in the original string
if(s[i]==' '){

//keep track of two pointers one start and another end
int p1=j,p2=i-1;

//loop till both start and end indexes overlap
while(p1<=p2){

//swap the characters at p1 and p2
char temp=s[p1];
s[p1]=s[p2];
s[p2]=temp;
//and then increment p1 and decrement p2
p1++;
p2--;
}

//now set j to new word's starting index
j=i+1;
}
}
//reverse last word as we will not find space after last word so we will never reverse it in the loop above
{
//keep track of two pointers one start and another end
int p1=j,p2=len-1;

//loop till both start and end indexes overlap
while(p1<=p2){

//swap the characters at p1 and p2
char temp=s[p1];
s[p1]=s[p2];
s[p2]=temp;
//and then increment p1 and decrement p2
p1++;
p2--;
}
}
//now reverse the whole string by calling reverse function above.
reverse(s);
return;
}
//driver function
int main(){
//for function 1
{
cout<<"Testing function 1 i.e, lastIndexOf()\n";
//input length of a string
cout<<"Enter length of string: ";
int len;
cin>>len;
cin.ignore();
cout<<"Enter the string: ";
//create new string
char*s=new char[len];
//input string
scanf("%[^\n]%*c", s);
cout<<"Enter the character to be found: ";
char ch;
cin>>ch;

//call function
int in=lastIndexOf(s,'a');
//if not found
if(in==-1){
cout<<ch<<" not found in"<<s<<endl;
}
//if found
else{
cout<<ch<<" found at "<<in<<" in "<<s<<endl;
}
cout<<endl;
}

//for function 2
{
cout<<"Testing function 2 i.e, reverse()\n";
//input length of a string
cout<<"Enter length of string: ";
int len;
cin>>len;
cin.ignore();
cout<<"Enter the string: ";
//create new string
char*s=new char[len];
//input string
scanf("%[^\n]%*c", s);

//call function
reverse(s);
cout<<"reversed string is: "<<s<<endl;
cout<<endl;
}


//for function 3
{
//testing
cout<<"Testing function 3 i.e, replace()\n";
//input length of a string
cout<<"Enter length of string: ";
int len;
cin>>len;
cin.ignore();
cout<<"Enter the string: ";
//create new string
char*s=new char[len];
//input string
scanf("%[^\n]%*c", s);
//input character 1
cout<<"Enter the target character i.e, character which is to be changed: ";
char ch1;
cin>>ch1;

//input character 2
cout<<"Enter the replacement character i.e, character which is the replacement: ";
char ch2;
cin>>ch2;
//call function
//replace characters
int count=replace(s,ch1,ch2);
cout<<"Total number of replacements for "<<ch1<<" to "<<ch2<<" are "<<count<<endl;
cout<<endl;
}


//for function 4
{
//testing
cout<<"Testing function 4 i.e, findSubstring()\n";
//input length of a string
cout<<"Enter length of string: ";
int len1;
cin>>len1;
cin.ignore();
cout<<"Enter the string: ";
//create new string
char*s=new char[len1];
//input string
scanf("%[^\n]%*c", s);
//input length of a substring
cout<<"Enter length of substring: ";
int len2;
cin>>len2;
cin.ignore();
cout<<"Enter the substring: ";
//create new string
char*sub=new char[len2];
//input substring
scanf("%[^\n]%*c", sub);
//find substring
int start=findSubstring(s,sub);
//if found
if(start==-1){
cout<<sub<<" not found in "<<s<<endl;
}
//if not found
else{
cout<<sub<<" found at "<<start<<" in "<<s<<endl;
}
cout<<endl;
}

//for function 5
{
//testing
cout<<"Testing function 5 i.e, isPalindrome()\n";
//input length of a string
cout<<"Enter length of string: ";
int len;
cin>>len;
cin.ignore();
cout<<"Enter the string: ";
//create new string
char*s=new char[len];
//input string
scanf("%[^\n]%*c", s);
//check palindrome
bool check=isPalindrome(s);
if(check==true){
cout<<s<<" is a palindrome."<<endl;
}
else{
cout<<s<<" is not a palindrome."<<endl;
}
cout<<endl;
}

//for function 6
{
//testing
cout<<"Testing function 6 i.e, reverseWords()\n";
//input length of a string
cout<<"Enter length of string: ";
int len;
cin>>len;
cin.ignore();
cout<<"Enter the string: ";
//create new string
char*s=new char[len];
//input string
scanf("%[^\n]%*c", s);
//before
cout<<"Before reversing words: "<<s<<endl;
//call
reverseWords(s);
//after
cout<<"After reversing words: "<<s<<endl;
}


return 0;
}

  • INPUT/OUTPUT:

Testing function 1 i.e, lastIndexOf()
Enter length of string: 6
Enter the string: Giants
Enter the character to be found: a
a found at 2 in Giants

Testing function 2 i.e, reverse()
Enter length of string: 6
Enter the string: flower
reversed string is: rewolf

Testing function 3 i.e, replace()
Enter length of string: 9
Enter the string: go giants
Enter the target character i.e, character which is to be changed: g
Enter the replacement character i.e, character which is the replacement: G
Total number of replacements for g to G are 2

Testing function 4 i.e, findSubstring()
Enter length of string: 10
Enter the string: Skyscraper
Enter length of substring: 3
Enter the substring: ysc
ysc found at 2 in Skyscraper

Testing function 5 i.e, isPalindrome()
Enter length of string: 7
Enter the string: abc cba
abc cba is a palindrome.

Testing function 6 i.e, reverseWords()
Enter length of string: 27
Enter the string: The Giants won the Pennant!
Before reversing words: The Giants won the Pennant!
After reversing words: Pennant! the won Giants The

  • Below are the screenshot attached for the code and input/output for better clarity and understanding.

CODE

INPUT/OUTPUT

So if you still have any doubt regarding this solution please feel free to ask it in the comment section below and if it is helpful then please upvote this solution, THANK YOU.


Related Solutions

Implement the following functions. Each function deals with null terminated C-strings. You can assume that any...
Implement the following functions. Each function deals with null terminated C-strings. You can assume that any char array passed into the functions will contain valid, null-terminated data. Your functions must have the signatures listed below. 1. This function returns the last index where the target char can be found in the string. it returns -1 if the target char does not appear in the string. For example, if s is “Giants” and target is ‘a’ the function returns 2. int...
A C++ question: Implement the following functions. Each function deals with null terminated C-strings. You can...
A C++ question: Implement the following functions. Each function deals with null terminated C-strings. You can assume that any char array passed into the functions will contain valid, null-terminated data. Your functions must have the signatures listed below. 1. This function returns the last index where the target char can be found in the string. it returns -1 if the target char does not appear in the string. For example, if s is “Giants” and target is ‘a’ the function...
A C++ question: Implement the following functions. Each function deals with null terminated C-strings. You can...
A C++ question: Implement the following functions. Each function deals with null terminated C-strings. You can assume that any char array passed into the functions will contain valid, null-terminated data. Your functions must have the signatures listed below. 1. This function returns the last index where the target char can be found in the string. it returns -1 if the target char does not appear in the string. For example, if s is “Giants” and target is ‘a’ the function...
A C++ question: Implement the following functions. Each function deals with null terminated C-strings. You can...
A C++ question: Implement the following functions. Each function deals with null terminated C-strings. You can assume that any char array passed into the functions will contain valid, null-terminated data. Your functions must have the signatures listed below. 1. This function returns the last index where the target char can be found in the string. it returns -1 if the target char does not appear in the string. For example, if s is “Giants” and target is ‘a’ the function...
A C++ question: Implement the following functions. Each function deals with null terminated C-strings. You can...
A C++ question: Implement the following functions. Each function deals with null terminated C-strings. You can assume that any char array passed into the functions will contain valid, null-terminated data. Your functions must have the signatures listed below. 1. This function returns the last index where the target char can be found in the string. it returns -1 if the target char does not appear in the string. For example, if s is “Giants” and target is ‘a’ the function...
C++ program assignment asks to implement the following functions. Each function deals with null terminated C-strings....
C++ program assignment asks to implement the following functions. Each function deals with null terminated C-strings. Assume that any char array passed into the functions will contain valid, null-terminated data. The functions must have the signatures listed below. 1. This function returns the last index where the target char can be found in the string. it returns -1 if the target char does not appear in the string. For example, if s is “Giants” and target is ‘a’ the function...
For this program you will implement the following utility functions to test mastery of C strings....
For this program you will implement the following utility functions to test mastery of C strings. *******you MUST use these these function***** void removeBlanks(char *src, char *dest); void replaceChar(char *src, char oldChar, char newChar); char *flipCase(const char *src); Please read the description of these functions carefully. In the removeBlanks function you will implement a routine that takes a string in as src and outputs the same string into dest but removing any blank space character encountered. For example, if the...
Q) You have been asked to develop a program which processes C++ null-terminated strings to extract...
Q) You have been asked to develop a program which processes C++ null-terminated strings to extract character and numerical data separately. Assume that the users runs the application (examTest.exe) from the command line as follows: examTest.exe X-Axis:10,Y-Axis:17,Z-Axis:-6 Your application should step through the input arguments and extract the values of the XAxis, Y-Axis and Z-Axis commands. The user must always enter the arguments in the specified order, however your application should check they are correct. At the end of your...
Implement each of the following functions and write a basic main() function that tests each. For...
Implement each of the following functions and write a basic main() function that tests each. For convenience, you should be able to find this starter class under Mimir's assignment 4 starter code. Do not change the name, parameters, or returns of any of these functions or of the name of the class itself. There is also no need in this assignment for any global variables. You are strongly encouraged to use your solution for some of these functions in others...
***IN C++*** Create student structure with the following fields:  Name (cstring or null-terminated character array)...
***IN C++*** Create student structure with the following fields:  Name (cstring or null-terminated character array)  Student ID (int – unique random value between 1000 and 9999)  grade (char – Values A thru F)  birthday (myDate – random value: range 1/1/2000 to 12/31/2005)  Home Town (string) Create an array of pointers to students of size 10. Example: Student *stuPtr[10]; Write a function that populates the array with 10 students. Example: populate(stuPtr); Write a display function that...
ADVERTISEMENT
ADVERTISEMENT
ADVERTISEMENT