Autor
|
Tema: cadena de caracteres (Leído 2,848 veces)
|
brayan
Desconectado
Mensajes: 3
|
buenas noches amigos necesito ayuda con un codigo de c++ debo hacer la funcion buscar y reemplazar no puedo usar funciones predefinidas me dejan usar el strlen y strcpy no se permite variables string ni funciones que la relaciones
he intentado hacerla por tres dias y no he podido quien puede colaborarme
|
|
« Última modificación: 24 Abril 2017, 05:23 am por brayan »
|
En línea
|
|
|
|
engel lex
|
muestra que llevas y especifica que es lo que te tranca
|
|
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
brayan
Desconectado
Mensajes: 3
|
mira lo que me piden es esto por ejemplo el usuario ingresa"hola mundo" ingresa una palabra a buscar"hola" y una a reemplazar "nada" al final el programa debe mostrar "nada mundo" pero que pasa con lo que yo eh realizado solo sirve si la palabra a reemplazar es de menor o igual tamaño a la palabra a buscar ejemplo"hola" para buscar y "nadas" para reemplazar me muestra "nada mundo" este es el codigo #include <iostream> #include <string.h> using namespace std; int reempla(char *frase,char *palabra,char *elim,char *frase1){ int cont1=0; int ind = 0; int letra = 0; int z=0; int j=0; for(int x=0; x<strlen(frase); x++){ if(frase[x] == '\0'){ // si esto se cumple llego al final de la oracion break; } if(frase[x] == palabra[0]){ [color=red][/color] ind = 0; letra = 0; for( j = x; j<x+strlen(palabra); j++){ if(frase[j] == palabra[ind]){ frase1[j]=32; frase1[j]=elim[z]; z++; letra++; ind++; } } if (letra == strlen(palabra)) { cont1++; } } } return cont1; } int main() { int gran=0; char frase[500]; char frase1[500]; char palabra[50]; char elim[50]; cout<<"Ingrese la cadena de caracter: "<<endl; fflush(stdin); gets(frase); for(int z=0;frase[z]!='\0';z++){ frase1[z]=frase[z]; } cout<<"Ingrese palabra a buscar: "<<endl; fflush(stdin); gets(palabra); cout<<"Ingrese palabra a reemplazar: "<<endl; fflush(stdin);gets(elim); reempla(frase,palabra,elim,frase1); cout<<frase<<endl<<palabra<<endl<<elim<<endl<<frase1<<endl; return 0; }
· Los códigos deben ir en etiquetas GeSHi
>aquí las reglas del foro -Engel Lex
|
|
« Última modificación: 24 Abril 2017, 04:50 am por engel lex »
|
En línea
|
|
|
|
Fedex15
Desconectado
Mensajes: 7
|
mira lo que me piden es esto por ejemplo el usuario ingresa"hola mundo" ingresa una palabra a buscar"hola" y una a reemplazar "nada" al final el programa debe mostrar "nada mundo" pero que pasa con lo que yo eh realizado solo sirve si la palabra a reemplazar es de menor o igual tamaño a la palabra a buscar ejemplo"hola" para buscar y "nadas" para reemplazar me muestra "nada mundo" este es el codigo #include <iostream> #include <string.h> using namespace std; int reempla(char *frase,char *palabra,char *elim,char *frase1){ int cont1=0; int ind = 0; int letra = 0; int z=0; int j=0; for(int x=0; x<strlen(frase); x++){ if(frase[x] == '\0'){ // si esto se cumple llego al final de la oracion break; } if(frase[x] == palabra[0]){ [color=red][/color] ind = 0; letra = 0; for( j = x; j<x+strlen(palabra); j++){ if(frase[j] == palabra[ind]){ frase1[j]=32; frase1[j]=elim[z]; z++; letra++; ind++; } } if (letra == strlen(palabra)) { cont1++; } } } return cont1; } int main() { int gran=0; char frase[500]; char frase1[500]; char palabra[50]; char elim[50]; cout<<"Ingrese la cadena de caracter: "<<endl; fflush(stdin); gets(frase); for(int z=0;frase[z]!='\0';z++){ frase1[z]=frase[z]; } cout<<"Ingrese palabra a buscar: "<<endl; fflush(stdin); gets(palabra); cout<<"Ingrese palabra a reemplazar: "<<endl; fflush(stdin);gets(elim); reempla(frase,palabra,elim,frase1); cout<<frase<<endl<<palabra<<endl<<elim<<endl<<frase1<<endl; return 0; }
· Los códigos deben ir en etiquetas GeSHi
>aquí las reglas del foro -Engel Lex Hola que tal, mira, no conozco mucho de c++, yo concozco mas de c, pero te hice aca un programa que funciona como vos queres. Si tenes alguna duda me decis, no creo que sea muy dificil pasarlo a c++. Saludos #include <stdio.h> #include <stdlib.h> #include <string.h> // Verifica si la cadena find se encuentra dentro cadena. En caso de ser // verdad devuelve 1, en caso contrario devuelve 0; int string_contiene (char* cadena, char* find) { size_t longCadena = strlen (cadena ); size_t longFind = strlen (find ); if (longCadena == 0) { return 0; } if ((longFind > 0) && (longFind <= longCadena)) { int count = 0; for (int i=0; ((i<longCadena) && (count<longFind)); i++) { count = 0; if (cadena[i] == find[0]) { for (; ((count<longFind) && (cadena[i] == find[count])); i++, count++); } } if (count == longFind) { return 1; } } return 0; } // Devuelve la posicion donde comienza la cadena find en la cadena. // Si la cadena find no se encuentra en cadena, devuelve -1. int string_posicion (char* cadena, char* find) { if (string_contiene (cadena, find)) { size_t longCadena = strlen (cadena ); size_t longFind = strlen (find ); int aux, count = 0; for (int i=0; ((i<longCadena) && (count<longFind)); i++) { count = 0; aux = i; if (cadena[i] == find[0]) { for (; ((count<longFind) && (cadena[i] == find[count])); i++, count++); } } if (count == longFind) { return aux; } } return -1; } // Recibe una cadena, una cadena a buscar y una cadena a reemplazar. // Si la cadena find esta en cadena, reemplaza la primera ocurrencia de find en // cadena por la cadena str y devuelve la nueva cadena, sino, devuelve la misma // cadena sin modificar. char* string_reemplazar (char* cadena, char* find, char* str) { int posicion = string_posicion (cadena, find); if (posicion != -1) { size_t longCadena = strlen (cadena ); size_t longFind = strlen (find ); size_t longStr = strlen (str ); if (longFind <= longStr) { char* cadenaModificada = (char*) malloc (sizeof (char) * longCadena + (longStr - longFind ) ); } char* cadenaModificada = (char*) malloc (sizeof (char) * longCadena - (longFind - longStr ) ); char* temp1 = (char*) malloc (sizeof (char) * longCadena ); char* temp2 = (char*) malloc (sizeof (char) * longCadena ); temp1[0] = '\0'; temp2[0] = '\0'; for (int i=0; i<posicion; i++){ temp1[i] = cadena[i]; temp1[i+1] = '\0'; } for (int i=0, j=posicion+longFind; j<longCadena; i++, j++) { temp2[i] = cadena[j]; temp2[i+1] = '\0'; } strcpy (cadenaModificada , temp1 ); int i=longT1; for (int j=0; j<longStr; j++, i++){ cadenaModificada[i] = str[j]; } for (int j=0 ;j<=longT2; j++, i++){ cadenaModificada[i] = temp2[j]; } return cadenaModificada; } return cadena; } int main(){ char* cadena = (char*) malloc (sizeof (char) * 100); char* find = (char*) malloc (sizeof (char) * 50); char* str = (char*) malloc (sizeof (char) * 50); printf ("Ingrese una cadena:\n"); printf ("Ingrese una palabra a buscar:\n"); printf ("Ingrese el reemplazo:\n"); cadena = string_reemplazar (cadena, find, str); printf ("La cadena es:\n%s", cadena ); return 0; }
|
|
|
En línea
|
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
Este último código tiene pérdida de memoria al perder la referencia a cadena. Hay que pensar que es memoria dinámica y hay que liberarla a mano.
|
|
|
En línea
|
|
|
|
Fedex15
Desconectado
Mensajes: 7
|
Este último código tiene pérdida de memoria al perder la referencia a cadena. Hay que pensar que es memoria dinámica y hay que liberarla a mano.
Aca lo mejore un poco, ahora le paso un char** para poder modificar la original, primero liberandola y poniendo la cadena nueva. Tambien saque las cadenas temporales y lo hice directamente, las habia usado para ir dandome cuenta que tenia que hacer. #include <stdio.h> #include <stdlib.h> #include <string.h> // Verifica si la cadena find se encuentra dentro cadena. En caso de ser // verdad devuelve 1, en caso contrario devuelve 0; int string_contiene (char* cadena, char* find) { size_t longCadena = strlen (cadena ); size_t longFind = strlen (find ); if (longCadena == 0) { return 0; } if ((longFind > 0) && (longFind <= longCadena)) { int count = 0; for (int i=0; ((i<longCadena) && (count<longFind)); i++) { count = 0; if (cadena[i] == find[0]) { for (; ((count<longFind) && (cadena[i] == find[count])); i++, count++); } } if (count == longFind) { return 1; } } return 0; } // Devuelve la posicion donde comienza la cadena find en la cadena. // Si la cadena find no se encuentra en cadena, devuelve -1. int string_posicion (char* cadena, char* find) { if (string_contiene (cadena, find)) { size_t longCadena = strlen (cadena ); size_t longFind = strlen (find ); int aux, count = 0; for (int i=0; ((i<longCadena) && (count<longFind)); i++) { count = 0; aux = i; if (cadena[i] == find[0]) { for (; ((count<longFind) && (cadena[i] == find[count])); i++, count++); } } if (count == longFind) { return aux; } } return -1; } // Recibe una cadena, una cadena a buscar y una cadena a reemplazar. // Si la cadena find esta en cadena, reemplaza la primera ocurrencia de find en // cadena por la cadena str y devuelve la nueva cadena, sino, devuelve la misma // cadena sin modificar. void string_reemplazar (char** cadena, char* find, char* str) { int posicion = string_posicion (cadena[0], find); if (posicion != -1) { size_t longCadena = strlen (cadena [0]); size_t longFind = strlen (find ); size_t longStr = strlen (str ); if (longFind <= longStr) { char* cadenaModificada = (char*) malloc (sizeof (char) * longCadena + (longStr - longFind ) ); } char* cadenaModificada = (char*) malloc (sizeof (char) * longCadena - (longFind - longStr ) ); for (int i=0; i<posicion; i++){ cadenaModificada[i] = cadena[0][i]; cadenaModificada[i+1] = '\0'; } int j = posicion; for (int i=0; i<longStr; j++, i++){ cadenaModificada[j] = str[i]; } for (int i=posicion+longFind; i<longCadena; j++, i++){ cadenaModificada[j] = cadena[0][i]; } cadenaModificada[j] = '\0'; cadena[0] = cadenaModificada; } } int main(){ char* cadena = (char*) malloc (sizeof (char) * 100); char* find = (char*) malloc (sizeof (char) * 50); char* str = (char*) malloc (sizeof (char) * 50); printf ("Ingrese una cadena:\n"); printf ("Ingrese una palabra a buscar:\n"); printf ("Ingrese el reemplazo:\n"); string_reemplazar (&cadena, find, str); printf ("La cadena es:\n%s", cadena ); return 0; }
|
|
« Última modificación: 27 Abril 2017, 18:56 pm por Fedex15 »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
cadena de caracteres
Programación C/C++
|
Ander123
|
1
|
2,590
|
6 Septiembre 2012, 14:15 pm
por avesudra
|
|
|
Cadena de caracteres en C
Programación C/C++
|
Jurott1
|
8
|
3,345
|
2 Mayo 2017, 01:33 am
por MAFUS
|
|
|
Cadena aleatoria de caracteres
Java
|
DaniSM98
|
4
|
4,357
|
21 Enero 2018, 08:22 am
por rub'n
|
|
|
MOVIDO: Cadena aleatoria de caracteres
Programación General
|
Eleкtro
|
0
|
2,266
|
15 Enero 2018, 09:56 am
por Eleкtro
|
|
|
Cargar archivo binario(No lee los caracteres de la cadena)
Programación C/C++
|
arturo2507
|
1
|
1,537
|
24 Noviembre 2018, 00:28 am
por AlbertoBSD
|
|