In: Computer Science
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 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.
#include<iostream>
#include<cstring>
using namespace std;
//function returns the last index where the target char can be
found in the string
int lastIndexOf(char *s, char target){
//iterate on the string from last
for(int i=strlen(s)-1;i>=0;i--){
//if found target then return
if(s[i]==target){
return i;
}
}
//if not found
return -1;
}
//function reverse the passes string
void reverse(char *s){
//keep two pointers one from start and one from end
int i=0,j=strlen(s)-1;
//while start is less than equal to end pointer
while(i<=j){
//perform swap operation
char temp=s[i];
s[i]=s[j];
s[j]=temp;
i++;
j--;
}
return;
}
//function replaces all instances of target with replacementChar
and return the total number of replacements
int replace(char *s, char target, char replacementChar){
//length of string
int len=strlen(s);
//total count of replacements
int total=0;
//iterate on string
for(int i=0;i<len;i++){
//if target found
if(s[i]==target){
//replace
s[i]=replacementChar;
//increment count
total+=1;
}
}
//return count
return total;
}
//function return first occurrence of substring in s
int findSubstring(char *s, char substring[]){
//length of s
int len1=strlen(s);
//length of substring
int len2=strlen(substring);
//iterate on s
for(int i=0;i<len1-len2+1;i++){
//set found true
bool found=true;
//starting from i check if we can make substring
for(int j=i;j<i+len2;j++){
if(s[j]==substring[j-i]){
}
//if some character mismatches then set found false and break
else{
found=false;
break;
}
}
//if found still true then return index
if(found==true){
return i;
}
}
//if not found then return -1
return -1;
}
//function to check if a string is palindrome or not
bool isPalindrome(char *s){
//keep two pointers one from start and one from end
int i=0,j=strlen(s)-1;
//keep matching the characters from start and end
while(i<=j){
//if matches
if(s[i]==s[j]){
i++;
j--;
}
//otherwise return false
else{
return false;
}
}
//if all matches then return true
return true;
}
//driver function
int main(){
//input length of a string
int len;
cin>>len;cin.ignore();
//create new string
char*s=new char[len];
//input string
scanf("%[^\n]%*c", s);
//two character for testing
char ch1='a',ch2='A';
//call function
int in=lastIndexOf(s,'a');
//if not found
if(in==-1){
cout<<ch1<<" not found in"<<s<<endl;
}
//if found
else{
cout<<ch1<<" found at "<<in<<" in
"<<s<<endl;
}
//reverse string
reverse(s);
cout<<"reversed string is: "<<s<<endl;
//replace characters
int count=replace(s,'a','A');
cout<<"Total number of replacements for "<<ch1<<"
to "<<ch2<<" are "<<count<<endl;
char substring[]="abc";
//find substring
int start=findSubstring(s,substring);
//if found
if(start==-1){
cout<<substring<<" not found in
"<<s<<endl;
}
//if not found
else{
cout<<substring<<" found at "<<start<<" in
"<<s<<endl;
}
//check palindrome
bool check=isPalindrome(s);
if(check==true){
cout<<s<<" is a palindrome."<<endl;
}
else{
cout<<s<<" is not a palindrome."<<endl;
}
return 0;
}
8
abc abcd
a found at 4 in abc abcd
reversed string is: dcba cba
Total number of replacements for a to A are 2
abc not found in dcbA cbA
dcbA cbA is not a palindrome.
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.