Reputation: 133
I have to eliminates any occurrence of string 2 in string 1 and also find the intersection of two strings.
Here is what I have tried:
#include "stdafx.h"
#include "stdio.h"
#include "conio.h"
#include "string.h"
class operation
{
public:
char string1[100];
char string2[50];
operation(){};
operation(char a[100], char b[50]);
operation operator+(operation);
operation operator-(operation);
operation operator*(operation);
};
operation::operation(char a[100], char b[50])
{
strcpy(string1, a);
strcpy(string2, b);
}
operation operation::operator +(operation param)
{
operation temp;
strcpy(param.string1, temp.string1);
strcpy(param.string2, temp.string2);
strcat(temp.string1, temp.string2);
return (temp);
}
operation operation::operator -(operation param)
{
operation temp;
strcpy(param.string1, temp.string1);
strcpy(param.string2, temp.string2) ;
for (int i = 0; i<strlen(temp.string2); i++)
{
temp.string1.erase(i, 1);
}
return (temp);
}
operation operation::operator *(operation param)
{
operation temp;
strcpy(param.string1, temp.string1);
strcpy(param.string2, temp.string2);
char result[50];
for(int i = 0; i<strlen(temp.string2); i++)
{
if( temp.string1.find( temp.string2[i] ) != string::npos )
result = result + temp.string2[i];
}
return (temp);
}
I am getting compiler errors and also I am not sure what I am trying is correct or not.
The errors are as follows:
C2228: left of .erase must have class/struct/union
C2228: left of .find must have class/struct/union
Upvotes: 5
Views: 12516
Reputation: 141928
Happily, in C++ set difference, intersection, and union algorithms have already been implemented in the standard library. These can be applied to strings like any container class.
Here is a demonstration (you could do this with simple char
arrays, but I'm using std::string
for clarity):
#include <string>
#include <algorithm>
#include <iostream>
int main()
{
std::string string1 = "kanu";
std::string string2 = "charu";
std::string string_difference, string_intersection, string_union;
std::sort(string1.begin(), string1.end());
std::sort(string2.begin(), string2.end());
std::set_difference(string1.begin(), string1.end(), string2.begin(), string2.end(), std::back_inserter(string_difference));
std::cout << "In string1 but not string2: " << string_difference << std::endl;
std::set_intersection(string1.begin(), string1.end(), string2.begin(), string2.end(), std::back_inserter(string_intersection));
std::cout << "string1 intersect string2: " << string_intersection << std::endl;
std::set_union(string1.begin(), string1.end(), string2.begin(), string2.end(), std::back_inserter(string_union));
std::cout << "string1 union string2: " << string_union << std::endl;
}
How you implement this in your operation
class is left as an exercise.
Upvotes: 9
Reputation: 81389
If strcpy( string1...
compiles then string1
is a char*
and not a std::string
. You seem to be mixing C and C++ functionality for strings. Choose one and stick with it (I'd say std::string
since you are doing C++)
Upvotes: 1
Reputation: 121829
This is C++ (not C: C doesn't have operator overloading)
You need to show us your class definition before we can help identify the compile error.
If you don't have a class definition for "operator", that alone explains the error :)
If you're using C++, you should probably be using standard C++ "string" (instead of C "char []" arrays). Using "string" will also affect your implementation code.
Q: This wouldn't be a homework assignment, would it? If so, please add "homework" to your tags.
Thanx in advance .. PSM
Upvotes: 0