Tengo que eliminar cualquier aparición de la cadena 2 en la cadena 1 y también encontrar la intersección de dos cadenas.
Esto es lo que he intentado:
#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); }
Recibo errores de comstackción y tampoco estoy seguro de que lo que estoy intentando sea correcto o no.
Los errores son los siguientes:
C2228: left of .erase must have class/struct/union C2228: left of .find must have class/struct/union
Felizmente, en C ++, los algoritmos de diferencia , intersección y unión ya se han implementado en la biblioteca estándar. Estos se pueden aplicar a cadenas como cualquier clase de contenedor.
Aquí hay una demostración (podría hacer esto con matrices de caracteres simples, pero estoy usando std::string
para mayor claridad):
#include #include #include 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; }
¡Ejecutarlo!
Cómo implementar esto en su clase de operation
se deja como un ejercicio.
Si strcpy( string1...
comstack entonces string1
es un char*
y no un std::string
. Parece que estás mezclando la funcionalidad de C y C ++ para los strings. Elige uno y quédate con él (yo diría que std::string
desde estas haciendo C ++)
Esto es C ++ (no C: C no tiene sobrecarga de operadores)
Debe mostrarnos su definición de clase antes de que podamos ayudar a identificar el error de comstackción.
Si no tiene una definición de clase para “operador”, eso explica el error 🙂
Si está utilizando C ++, probablemente debería usar la “cadena” estándar de C ++ (en lugar de las matrices C “char []”). Usar “cadena” también afectará su código de implementación.
P: Esto no sería una tarea, ¿verdad? Si es así, por favor agregue “tarea” a sus tags.
Gracias de antemano .. PSM