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

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


  Mostrar Temas
Páginas: 1 [2]
11  Programación / Programación C/C++ / Error programa encontrar una cadena dentro de otra en: 9 Abril 2014, 00:16 am
Tengo que hacer un programa que verifique si una cadena se encuentra dentro de otra ( sin usar la función strstr() ). Este es el código:

Código:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

short int fBuscar(char *ptrX, char *ptrY, short int longitud);   // prototipo función fBuscar

short int fBuscar(char *ptrX, char *ptrY, short int longitud)
{
short int contador1 = 0;
short int contador2 = 0;
char *ptrZ = ptrY;   // usamos ptrZ como una variable auxiliar que almacena la dirección en memoria de cadenaABuscar[0]

for(; *ptrX != '\0'; ptrX++){

if(*ptrX == *ptrY){
contador1++;
contador2++;
ptrY++;   // ptrY apunta a la siguiente posición de memoria

if(contador1 == longitud){
return (contador2 - longitud);
}
}
else{
ptrY = ptrZ;
contador1 = 0;
contador2++;
}
}

return (-1);   // si se llega hasta aquí no se ha encontrado la cadenaABuscar en cademaOriginal
}

int main(void)
{
const short int tamanio;
int c;
printf("Definir tama%co aproximado de la cadena: ", 164);
scanf("%d", &tamanio);

while((c = getchar()) != '\n');   // limpieza del buffer

char cadenaOriginal[tamanio];   // cadena donde vamos a buscar
char cadenaABuscar[tamanio];   // cadena de caracteres que queremos ver si se encuentra en cadenaOriginal
short int longitud;
short int x;   // el valor de x verifica si la cadenaABuscar se encuentra en cadenaOriginal

puts("\nIntroducir cadena donde se quiere buscar:");
fgets(cadenaOriginal, tamanio, stdin);

puts("\nIntroducir cadena que queremos buscar:");
fgets(cadenaABuscar, tamanio, stdin);

longitud = strlen(cadenaABuscar) - 1;   // evitamos contar el caracter '\n' que almacena fgets()

x = fBuscar(cadenaOriginal, cadenaABuscar, longitud);

if(x == -1){
puts("Cadena no contenida");
}
else{
puts("Cadena no contenida");
printf("Encontrada en la posicion %d", x+1);
}

return EXIT_SUCCESS;
}


El problema es que al introducir por ejemplo hhola y después hola me da error porque de las h los punteros ptrX y ptrY saltan a la h y la o respectivamente.
No sé como arreglarlo. (SEGURAMENTE HAYA MÁS FALLOS)

Gracias
12  Programación / Programación C/C++ / Duda función barajar en: 8 Abril 2014, 15:45 pm
Hola, tengo el siguiente fragmento de programa:
Código:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

void baraja( int wMazo[][13] );
// código

int main (void)
{
   //código
   int mazo[4][13] = {0};
   srand(time(0));
   baraja(mazo);
   //código
   return EXIT_SUCCESS;
}

void baraja( int wMazo[][13] )
{
   int fila;
   int columna;
   int carta;

   for(carta=1; carta<=52; carta++){
      do{
         fila = rand() % 4;
         columna = rand() % 13;
      } while(wMazo[fila][columna] != 0);
      wMazo[fila][columna] = carta;
   }
}

No entiendo porqué se pasa wMazo[][13], es decir, porque se deja el primer corchete sin datos, ¿no debería ser wMazo[4][13] ?

Gracias.
13  Programación / Programación C/C++ / ¿Ventajas de un puntero a una función? en: 5 Abril 2014, 20:26 pm
Pues eso, quería saber cual es la ventaja de usar una función con una llamada normal, por ejemplo funcion(10) a hacerlo con un puntero a una función, por ejemplo ( siendo la decalaración void (*ptrF) (int x); )  x=ptrF(10)
14  Programación / Programación C/C++ / Alguien que me pueda ayudar con este fragmento de código en: 3 Abril 2014, 20:07 pm
Código:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>


struct carta{
const char *cara;
const char *palo;
};

typedef struct carta Carta;

void llenaMazo(Carta * const wMazo, const char * wCara[], const char * wPalo[]);

int main(void)
{
Carta mazo[52];

const char *cara[] = {"As", "Dos", "Tres", "Cuatro", "Cinco", "Seis", "Siete", "Ocho", "Nueve", "Diez", "Jota", "Reina", "Rey"};
const char *palo[] = {"Corazones", "Diamantes", "Treboles", "Picas"};

srand(time(NULL));

llenaMazo(mazo, cara, palo);


return EXIT_SUCCESS;
}

void llenaMazo(Carta * const wMazo, const char * wCara[], const char * wPalo[])
{
int i;

for(i=0; i<=51; i++){
wMazo[i].cara = wCara[i%13];
wMazo[i].palo = wPalo[i/13];
}

}



No entiendo lo que quiere hacer. Sé algo de punteros pero me armo un lío enorme.


Muchas gracias

15  Programación / Programación C/C++ / Entrada de datos con fgets() en: 2 Abril 2014, 18:23 pm
Imaginemos que tenemos un un array como:

   char cadena[10];

Entonces usamos la función fgets para leer una cadena de caracteres como:

   fgets(cadena, 10, stdin);

E introducimos menos de 9 caracteres por lo que automáticamente se nos pone un '\n' al final del array, en la posición cadena[9] en el ejemplo.
Entonces si usamos:

   if(cadena[strlen(cadena)-1] == '\n'{
      cadena[strlen(cadena)-1] = '\0'
   }

obtenemos la cadena sin la impresión de una nueva línea (es decir que el cursor se situa justo después del último caracter.

Lo que no entiendo de todo es es que si introducimos por ejemplo HOLA el array quedaría como:

   H O L A  \0 _ _ _ _ \n

y al usar la anterior instrucción para quitar el '\n' tendríamos:
   
   H O L A  \0 _ _ _ _ \0

¿Cómo es posible tener dos '\0'?

Muchas gracias.
16  Programación / Programación C/C++ / Como capturar dato de entrada no esperado en: 28 Marzo 2014, 19:05 pm
¿Cómo se podría hacer para que en un programa que solo pida números enteros si se introduce un float, double o char el programa pueda capturar el error.

Es decir que si yo tengo por ejemplo scanf("%d", &x); e introducimos en 5.5 es claro que si lo imprimimos con printf("%d", x); el programa mostrará 5. Lo que yo quiero es algún fragmento de código que me permita imprimir que se ha introducido un tipo diferente de int.

Gracias
Páginas: 1 [2]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines