Hola,estaba programando un pequeño intento de remplazar un carácter por otro...Pero por alguna razon no me lo remplaza.

Código: Seleccionar todo

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
    char CadenaA[260] = "Hola Indetectables"; //Cadena Original
    char CadenaB[260]; //String para la Nueva Cadena
    int i; //Int para el bucle for
    for(i=0;i>strlen(CadenaA);i++) //Iniciamos el bucle hasta que i > que el len de CadenaA
    {                                  
      if(CadenaB[i] == "e")
          {
            CadenaB[i] = "S";  
            CadenaA[i] = CadenaB[i];
            i++;
          }
          CadenaA[i] = CadenaB[i];                                     
    }
  printf("%s \n",CadenaB); //Imprimimos la nueva cadena
  system("PAUSE");	
  return 0;
}
No logro fixearlo,seguro que alguno de ustedes ve el fallo y me corrije...

Muchas gracias por su atención...
Blog técnico dedicado a la seguridad informática y al estudio de nuevas vulnerabilidades.
Blog: http://www.seginformatica.net
Twitter: https://twitter.com/#!/p0is0nseginf
Bueno, intentando tocar lo menos posible lo que habias hecho me queda esto:

Código: Seleccionar todo

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
    char CadenaA[] = "Hola Indetectables"; //Cadena Original
    char *CadenaB = CadenaA; //String para la Nueva Cadena
    int i; //Int para el bucle for
    for(i=0;CadenaA[i]!='\0';i++) //Iniciamos el bucle hasta que encontremos fin de cadena
    {                                 
      if(CadenaA[i] == 'a')
         {
            CadenaA[i] = 'S'; 
            CadenaB[i] = CadenaA[i];
            i++;
          }
    }                                 
    
  printf("%s \n",CadenaB); //Imprimimos la nueva cadena
  system("PAUSE");   
  return 0;
}
Saludos
Imagen
Y si no quieres respetar lo que tenias hecho y tampoco quieres modificar la cadena original podrias hacer algo asi:

Código: Seleccionar todo

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
    char CadenaA[] = "Hola Indetectables"; //Cadena Original
    char CadenaB[256] ={'\0'}; //String para la Nueva Cadena
    int tam = strlen(CadenaA);
    strncpy(CadenaB,CadenaA,tam);
    
    int i; //Int para el bucle for
    for(i=0;CadenaB[i]!='\0';i++) //Iniciamos el bucle hasta que encontramos fin de cadena
    {                                 
      if(CadenaB[i] == 'a') CadenaB[i] = 'S';
           
    }                                 
   
  printf("%s \n",CadenaB); //Imprimimos la nueva cadena
  printf("%s", CadenaA);   //Impriminos la cadena original
  getchar();   
  return 0;
}
Imagen
Hay un par de conceptos erroneos p0is0n, en tu code
Ej:

Código: Seleccionar todo

for(i=0;i>strlen(CadenaA);i++) //Iniciamos el bucle hasta que i > que el len de CadenaA
El for utiliza el condicional comparativo como un "while" es decir
el for se va a repetir MIENTRAS se cumpla la condicion
y tu estas pensando que es HASTA que se cumpla
por lo cual debes cambiar el ">" por "<"
Luego sumas 2 veces la variable i
(en la declaracion del for está implicita la iteracion de la variable)
y luego tú la sumas nuevamente si se cumple otra condicion dentro de un IF
(por lo cual, te estas salteando un caracter cuando se cumple la condicion IF)

Bueno, mi code (adaptado lo mas posible al tuyo) es:

Código: Seleccionar todo

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
    char CadenaA[260] = "Hola Indetectables"; //Cadena Original
    char CadenaB[260] = ""; //String para la Nueva Cadena
    unsigned int i; //Int para el bucle for
    for(i=0;i<strlen(CadenaA);i++) //Iniciamos el bucle hasta que encontremos fin de cadena
    {                      
		
      if(CadenaA[i] == 'a')
         {
            CadenaB[i] = 'S'; 
                      
          }
	  else CadenaB[i]=CadenaA[i];
    }                                 
    
  printf("%s \n",CadenaB); //Imprimimos la nueva cadena
  system("PAUSE");   
  return 0;
}
Probado en VC++ 6
Saludos
Imagen
Muchas gracias por las correciones,en especial a vos osnaraus que me hiciste ver el fallo.

Gracias por su tiempo,de verdad se lo agradezo mucho...
Blog técnico dedicado a la seguridad informática y al estudio de nuevas vulnerabilidades.
Blog: http://www.seginformatica.net
Twitter: https://twitter.com/#!/p0is0nseginf
Hice un pequeño code para probar la función replace en 2 versiones: la que sólo reemplaza un caracter y la que reemplaza todas las apariciones. En ambos casos la cadena puede ser de cualquier tamaño, no sólo de 250 caracteres.

Saludos!

Código: Seleccionar todo

//replace_r007.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/**********************************************
* Coder: R-007                                *
* Functions:                                  *
* replace(string, char a, char b)             *
* replaceAll(string, char a, char b)          *
* replace modification, original by p0is0n-123*
* Indetectables.net/foro                      *
* Date: 21/12/2010                            *
**********************************************/

char *replace(char * str,char a,char b)
{
  int i= 0;
  int found = 0;
  char * strNew = malloc(strlen(str));
  while (i < strlen(str)){
    if((str[i] == a)&&(found == 0)){ 
        strNew[i] = b;
        found = 1;
    }
    else strNew[i]=str[i];		    
    i++;
  } 
  return strNew;
}

char *replaceAll(char * str,char a,char b)
{
  int i= 0;
  char * strNew = malloc(strlen(str));
  while (i < strlen(str)){
    if(str[i] == a) strNew[i] = b;
    else strNew[i] = str[i];	    
    i++;
  } 
  return strNew;
}

int main ()
{
  char* original = "http://indetectables.net/foro/";
  char* example1 = replace(original,'o','0');
  char* example2 = replaceAll(original,'e', 'a');
  printf("REPLACE BY R-007:");
  printf("\n----------------------------");
  printf("\noriginal:%s",original); //returns "http://indetectables.net/foro/"
  printf("\nsubstr1:%s",example1);  //returns "http://indetectables.net/f0ro/"
  printf("\nsubstr2:%s",example2);  //returns "http://indatactablas.nat/foro/"
  printf("\n----------------------------");
  printf("\nPress any key to continue...");
  getchar();
  return 0;
}

//eof replace_r007.c
Coño no había visto el post y acabo de publicar una función parecida... Bueno la pongo aquí también para retroalimentar el post...

Reemplaza palabras en una cadena separando por espacios:

Código: Seleccionar todo

#include <stdio.h>
#include <string.h>
#include <windows.h>

/***************************************\
*         _                             *
*        | |                            *
*        | |_                           *
* Coder: |___| I N K G L                *
* Funcion: Reemplazar Palabras ejemplo  *
* Fecha: 21/12/10                       *
* Web: indetectables.net                *
\***************************************/
int main()
{
  // Nuestras cadenas
  char *sCorte;
  char sOriginal[]="soy linkgl reemplazando palabras";
  char sVieja[]="linkgl";
  char sNueva[]="indetectables";
  char *sFinal;
  int iResta=0;
  int i;
  // Procedimiento
  if (strlen(sVieja)<=strlen(sNueva))
  {                                   
    iResta=strlen(sNueva)-strlen(sVieja);
  }
  sFinal=(char *)malloc(strlen(sOriginal)+iResta)-iResta;
  sCorte=strtok(sOriginal," ");
  while(sCorte!=0)
  {
    if(strcmp(sCorte,sVieja)==0)
    {
      strcat(sFinal,sNueva);
      strcat(sFinal," ");
      printf("Concactenando... %s\n",sNueva);
      sCorte=strtok(0," ");
    }
    else
    {
      strcat(sFinal,sCorte);
      strcat(sFinal," ");
      printf("Concactenando... %s\n",sCorte);
      sCorte=strtok(0," ");
    }
  }
  printf("Final -> %s",sFinal);
  getchar();
  return 0;
}
Retorna:
Soy indetectables reemplazando palabras
//mHmm..
Hola que tal, con Linkgl ayer tambien miramos lo mismo y quice hacerlo, aquí mi ejemplo:

Código: Seleccionar todo

/*  - @author The Swash
    - @copyright 2010
    - @greatz Linkgl
*/    


#include <stdio.h>
#include <string.h>

char * replacechr(char * string, char replacestr, char replacewith);


main(){
       printf("%s",replacechr("jaime",'a','o'));
       getchar();
       }             
                         
char * replacechr(char * string, char replacestr, char replacewith)
{
     int i,tam = strlen(string);
     char * temp;
     temp = malloc(tam);
     
     for (i = 0; i < tam; i++){
         if (string[i]==replacestr){
                    temp[i] = replacewith;
                    }
         else {
              temp[i] = string[i];
              }
         } 
     return temp;

}  
Gracias Linkgl..
En tu ventana
Y en tu ventana, gritas al cielo pero lo dices callada..
The Swgay! te corrijo unas cosillas, para usar malloc debes incluír la librería windows.h o stdlib.h, y en el malloc que haces:

temp=malloc(tam); te tiene que devolver char * entonces conviertelo
temp=(char *)malloc(tam);

Esta bueno el código!.

->Edito: Es cierto para usar malloc también puedes incluír stdlib.h, aunque también la puedes llamar si incluyes windows.h
//mHmm..
Responder

Volver a “C/C++”