elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  cadena de caracteres
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: cadena de caracteres  (Leído 2,848 veces)
brayan

Desconectado Desconectado

Mensajes: 3


Ver Perfil
cadena de caracteres
« en: 24 Abril 2017, 04:16 am »

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
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: cadena de caracteres
« Respuesta #1 en: 24 Abril 2017, 04:21 am »

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 Desconectado

Mensajes: 3


Ver Perfil
Re: cadena de caracteres
« Respuesta #2 en: 24 Abril 2017, 04:30 am »

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
Código
  1. #include <iostream>
  2. #include <string.h>
  3. using namespace std;
  4.  
  5. int reempla(char *frase,char *palabra,char *elim,char *frase1){
  6. int cont1=0;
  7. int ind = 0;
  8. int letra = 0;
  9. int z=0;
  10. int j=0;
  11.  
  12.  
  13. for(int x=0; x<strlen(frase); x++){
  14.  
  15. if(frase[x] == '\0'){ // si esto se cumple llego al final de la oracion
  16. break;
  17. }
  18.  
  19. if(frase[x] == palabra[0]){
  20. [color=red][/color]
  21. ind = 0;
  22.  
  23. letra = 0;
  24. for( j = x; j<x+strlen(palabra); j++){
  25.  
  26. if(frase[j] == palabra[ind]){
  27.  
  28. frase1[j]=32;
  29. frase1[j]=elim[z];
  30.  
  31.  
  32. z++;
  33.  
  34.  
  35. letra++;
  36. ind++;
  37.  
  38. }
  39.  
  40. }
  41.  
  42. if (letra == strlen(palabra)) {
  43. cont1++;
  44. }
  45.  
  46. }
  47.  
  48. }
  49.  
  50.  
  51. return cont1;
  52. }
  53.  
  54. int main() {
  55.  
  56. int gran=0;
  57. char frase[500];
  58. char frase1[500];
  59. char palabra[50];
  60. char elim[50];
  61.  
  62.  
  63. cout<<"Ingrese la cadena de caracter: "<<endl;
  64. fflush(stdin);
  65. gets(frase);
  66.  
  67.  
  68. for(int z=0;frase[z]!='\0';z++){
  69. frase1[z]=frase[z];
  70. }
  71.  
  72.  
  73. cout<<"Ingrese palabra a buscar: "<<endl;
  74. fflush(stdin);
  75. gets(palabra);
  76.  
  77. cout<<"Ingrese palabra a reemplazar: "<<endl;
  78. fflush(stdin);gets(elim);
  79.  
  80. reempla(frase,palabra,elim,frase1);
  81.  
  82. cout<<frase<<endl<<palabra<<endl<<elim<<endl<<frase1<<endl;
  83.  
  84. return 0;
  85. }


· 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 Desconectado

Mensajes: 7


Ver Perfil
Re: cadena de caracteres
« Respuesta #3 en: 27 Abril 2017, 02:11 am »

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
Código
  1. #include <iostream>
  2. #include <string.h>
  3. using namespace std;
  4.  
  5. int reempla(char *frase,char *palabra,char *elim,char *frase1){
  6. int cont1=0;
  7. int ind = 0;
  8. int letra = 0;
  9. int z=0;
  10. int j=0;
  11.  
  12.  
  13. for(int x=0; x<strlen(frase); x++){
  14.  
  15. if(frase[x] == '\0'){ // si esto se cumple llego al final de la oracion
  16. break;
  17. }
  18.  
  19. if(frase[x] == palabra[0]){
  20. [color=red][/color]
  21. ind = 0;
  22.  
  23. letra = 0;
  24. for( j = x; j<x+strlen(palabra); j++){
  25.  
  26. if(frase[j] == palabra[ind]){
  27.  
  28. frase1[j]=32;
  29. frase1[j]=elim[z];
  30.  
  31.  
  32. z++;
  33.  
  34.  
  35. letra++;
  36. ind++;
  37.  
  38. }
  39.  
  40. }
  41.  
  42. if (letra == strlen(palabra)) {
  43. cont1++;
  44. }
  45.  
  46. }
  47.  
  48. }
  49.  
  50.  
  51. return cont1;
  52. }
  53.  
  54. int main() {
  55.  
  56. int gran=0;
  57. char frase[500];
  58. char frase1[500];
  59. char palabra[50];
  60. char elim[50];
  61.  
  62.  
  63. cout<<"Ingrese la cadena de caracter: "<<endl;
  64. fflush(stdin);
  65. gets(frase);
  66.  
  67.  
  68. for(int z=0;frase[z]!='\0';z++){
  69. frase1[z]=frase[z];
  70. }
  71.  
  72.  
  73. cout<<"Ingrese palabra a buscar: "<<endl;
  74. fflush(stdin);
  75. gets(palabra);
  76.  
  77. cout<<"Ingrese palabra a reemplazar: "<<endl;
  78. fflush(stdin);gets(elim);
  79.  
  80. reempla(frase,palabra,elim,frase1);
  81.  
  82. cout<<frase<<endl<<palabra<<endl<<elim<<endl<<frase1<<endl;
  83.  
  84. return 0;
  85. }


· 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

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. // Verifica si la cadena find se encuentra dentro cadena. En caso de ser
  6. // verdad devuelve 1, en caso contrario devuelve 0;
  7.  
  8. int string_contiene (char* cadena, char* find) {
  9. size_t longCadena = strlen (cadena);
  10. size_t longFind = strlen (find);
  11. if (longCadena == 0) {
  12. return 0;
  13. }
  14. if ((longFind > 0) && (longFind <= longCadena)) {
  15. int count = 0;
  16. for (int i=0; ((i<longCadena) && (count<longFind)); i++) {
  17. count = 0;
  18. if (cadena[i] == find[0]) {
  19. for (; ((count<longFind) && (cadena[i] == find[count])); i++, count++);
  20. }
  21. }
  22. if (count == longFind) {
  23. return 1;
  24. }
  25. }
  26. return 0;
  27. }
  28.  
  29. // Devuelve la posicion donde comienza la cadena find en la cadena.
  30. // Si la cadena find no se encuentra en cadena, devuelve -1.
  31.  
  32. int string_posicion (char* cadena, char* find) {
  33. if (string_contiene (cadena, find)) {
  34. size_t longCadena = strlen (cadena);
  35. size_t longFind = strlen (find);
  36. int aux, count = 0;
  37. for (int i=0; ((i<longCadena) && (count<longFind)); i++) {
  38. count = 0;
  39. aux = i;
  40. if (cadena[i] == find[0]) {
  41. for (; ((count<longFind) && (cadena[i] == find[count])); i++, count++);
  42. }
  43. }
  44. if (count == longFind) {
  45. return aux;
  46. }
  47. }
  48. return -1;
  49. }
  50.  
  51. // Recibe una cadena, una cadena a buscar y una cadena a reemplazar.
  52. // Si la cadena find esta en cadena, reemplaza la primera ocurrencia de find en
  53. // cadena por la cadena str y devuelve la nueva cadena, sino, devuelve la misma
  54. // cadena sin modificar.
  55.  
  56. char* string_reemplazar (char* cadena, char* find, char* str) {
  57. int posicion = string_posicion (cadena, find);
  58. if (posicion != -1) {
  59. size_t longCadena = strlen (cadena);
  60. size_t longFind = strlen (find);
  61. size_t longStr = strlen (str);
  62. if (longFind <= longStr) {
  63. char* cadenaModificada = (char*) malloc (sizeof (char) * longCadena + (longStr - longFind) );
  64. }
  65. char* cadenaModificada = (char*) malloc (sizeof (char) * longCadena - (longFind - longStr) );
  66. char* temp1 = (char*) malloc (sizeof (char) * longCadena);
  67. char* temp2 = (char*) malloc (sizeof (char) * longCadena);
  68. temp1[0] = '\0';
  69. temp2[0] = '\0';
  70. for (int i=0; i<posicion; i++){
  71. temp1[i] = cadena[i];
  72. temp1[i+1] = '\0';
  73. }
  74. for (int i=0, j=posicion+longFind; j<longCadena; i++, j++) {
  75. temp2[i] = cadena[j];
  76. temp2[i+1] = '\0';
  77. }
  78. size_t longT1 = strlen (temp1), longT2 = strlen (temp2);
  79. strcpy (cadenaModificada, temp1);
  80. int i=longT1;
  81. for (int j=0; j<longStr; j++, i++){
  82. cadenaModificada[i] = str[j];
  83. }
  84. for (int j=0 ;j<=longT2; j++, i++){
  85. cadenaModificada[i] = temp2[j];
  86. }
  87. free (temp1);
  88. free (temp2);
  89. return cadenaModificada;
  90. }
  91. return cadena;
  92. }
  93.  
  94. int main(){
  95. char* cadena = (char*) malloc (sizeof (char) * 100);
  96. char* find = (char*) malloc (sizeof (char) * 50);
  97. char* str = (char*) malloc (sizeof (char) * 50);
  98. printf ("Ingrese una cadena:\n");
  99. gets (cadena);
  100. printf ("Ingrese una palabra a buscar:\n");
  101. gets (find);
  102. printf ("Ingrese el reemplazo:\n");
  103. gets (str);
  104. cadena = string_reemplazar (cadena, find, str);
  105. printf ("La cadena es:\n%s", cadena);
  106. return 0;
  107. }
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: cadena de caracteres
« Respuesta #4 en: 27 Abril 2017, 12:01 pm »

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 Desconectado

Mensajes: 7


Ver Perfil
Re: cadena de caracteres
« Respuesta #5 en: 27 Abril 2017, 18:41 pm »

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.

Código
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. // Verifica si la cadena find se encuentra dentro cadena. En caso de ser
  6. // verdad devuelve 1, en caso contrario devuelve 0;
  7.  
  8. int string_contiene (char* cadena, char* find) {
  9. size_t longCadena = strlen (cadena);
  10. size_t longFind = strlen (find);
  11. if (longCadena == 0) {
  12. return 0;
  13. }
  14. if ((longFind > 0) && (longFind <= longCadena)) {
  15. int count = 0;
  16. for (int i=0; ((i<longCadena) && (count<longFind)); i++) {
  17. count = 0;
  18. if (cadena[i] == find[0]) {
  19. for (; ((count<longFind) && (cadena[i] == find[count])); i++, count++);
  20. }
  21. }
  22. if (count == longFind) {
  23. return 1;
  24. }
  25. }
  26. return 0;
  27. }
  28.  
  29. // Devuelve la posicion donde comienza la cadena find en la cadena.
  30. // Si la cadena find no se encuentra en cadena, devuelve -1.
  31.  
  32. int string_posicion (char* cadena, char* find) {
  33. if (string_contiene (cadena, find)) {
  34. size_t longCadena = strlen (cadena);
  35. size_t longFind = strlen (find);
  36. int aux, count = 0;
  37. for (int i=0; ((i<longCadena) && (count<longFind)); i++) {
  38. count = 0;
  39. aux = i;
  40. if (cadena[i] == find[0]) {
  41. for (; ((count<longFind) && (cadena[i] == find[count])); i++, count++);
  42. }
  43. }
  44. if (count == longFind) {
  45. return aux;
  46. }
  47. }
  48. return -1;
  49. }
  50.  
  51. // Recibe una cadena, una cadena a buscar y una cadena a reemplazar.
  52. // Si la cadena find esta en cadena, reemplaza la primera ocurrencia de find en
  53. // cadena por la cadena str y devuelve la nueva cadena, sino, devuelve la misma
  54. // cadena sin modificar.
  55.  
  56. void string_reemplazar (char** cadena, char* find, char* str) {
  57. int posicion = string_posicion (cadena[0], find);
  58. if (posicion != -1) {
  59. size_t longCadena = strlen (cadena[0]);
  60. size_t longFind = strlen (find);
  61. size_t longStr = strlen (str);
  62. if (longFind <= longStr) {
  63. char* cadenaModificada = (char*) malloc (sizeof (char) * longCadena + (longStr - longFind) );
  64. }
  65. char* cadenaModificada = (char*) malloc (sizeof (char) * longCadena - (longFind - longStr) );
  66. for (int i=0; i<posicion; i++){
  67. cadenaModificada[i] = cadena[0][i];
  68. cadenaModificada[i+1] = '\0';
  69. }
  70. int j = posicion;
  71. for (int i=0; i<longStr; j++, i++){
  72. cadenaModificada[j] = str[i];
  73. }
  74. for (int i=posicion+longFind; i<longCadena; j++, i++){
  75. cadenaModificada[j] = cadena[0][i];
  76. }
  77.                cadenaModificada[j] = '\0';
  78. free (cadena[0]);
  79. cadena[0] = cadenaModificada;
  80. }
  81. }
  82.  
  83. int main(){
  84. char* cadena = (char*) malloc (sizeof (char) * 100);
  85. char* find = (char*) malloc (sizeof (char) * 50);
  86. char* str = (char*) malloc (sizeof (char) * 50);
  87. printf ("Ingrese una cadena:\n");
  88. gets (cadena);
  89. printf ("Ingrese una palabra a buscar:\n");
  90. gets (find);
  91. printf ("Ingrese el reemplazo:\n");
  92. gets (str);
  93. string_reemplazar (&cadena, find, str);
  94. printf ("La cadena es:\n%s", cadena);
  95.        free(cadena);
  96.        free(find);
  97.        free(str);
  98. return 0;
  99. }
  100.  

« Última modificación: 27 Abril 2017, 18:56 pm por Fedex15 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
cadena de caracteres
Programación C/C++
Ander123 1 2,590 Último mensaje 6 Septiembre 2012, 14:15 pm
por avesudra
Cadena de caracteres en C
Programación C/C++
Jurott1 8 3,345 Último mensaje 2 Mayo 2017, 01:33 am
por MAFUS
Cadena aleatoria de caracteres
Java
DaniSM98 4 4,357 Último mensaje 21 Enero 2018, 08:22 am
por rub'n
MOVIDO: Cadena aleatoria de caracteres
Programación General
Eleкtro 0 2,266 Último mensaje 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 Último mensaje 24 Noviembre 2018, 00:28 am
por AlbertoBSD
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines