Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Cadena de caracteres aleatorios

Estas en el tema de Cadena de caracteres aleatorios en el foro de C/C++ en Foros del Web. Hola,por mas que he buscado no doy con el codigo de como cargar una cadena de caracteres aleatorios.. el enunciado es largo pero voy por ...
  #1 (permalink)  
Antiguo 12/04/2010, 09:39
 
Fecha de Ingreso: marzo-2010
Mensajes: 127
Antigüedad: 14 años, 1 mes
Puntos: 2
Cadena de caracteres aleatorios

Hola,por mas que he buscado no doy con el codigo de como cargar una cadena de caracteres aleatorios..
el enunciado es largo pero voy por la segunda linea :

Generar la longitud de la cadena aleatoriamente y la propia cadena de
caracteres (tanto en mayúsculas como en minúsculas) de 50 caracteres útiles
como máximo y 15 como mínimo...

lo que voy teniendo es esto:
Código C:
Ver original
  1. #include<stdio.h>
  2.  #include<time.h>
  3.  #include<stdlib.h>
  4.  #include<ctype.h>
  5.  
  6.  void main(){
  7.  
  8.  char cad[51];
  9.  int l=0,i=0;
  10.  
  11.  printf("*******LONGITUD CADENA ALEATORIA*******\n");
  12.  srand(time(NULL));
  13.  l=(rand()%35 )+ 15;
  14.  printf("la longitud es %d\n",l);
  15.  for(i=0;i<l;i++){
  16.  char c= (rand()%122)+97;
  17.     printf("%c\n",c);
  18.  }
  19.  }

he probado mil cosas en el rand.. con los codigos ascii y naaa,.no me sale si me podeis hechar una mano os lo agradeceria muxxxooo.

Salu2
  #2 (permalink)  
Antiguo 12/04/2010, 11:46
 
Fecha de Ingreso: marzo-2010
Mensajes: 127
Antigüedad: 14 años, 1 mes
Puntos: 2
De acuerdo Respuesta: Cadena de caracteres aleatorios

Hola chicos,veran voy creo yo mejorando el codigo ya me ejecuta pero... solo teniendo en cuenta las letras mayusculas de la tabla ascci,no se como hacer para que me coja tmb las minusculas.. si se os ocurre algo porfis decirmelo..gracias.

Código C:
Ver original
  1. #include<stdio.h>
  2.  #include<time.h>
  3.  #include<stdlib.h>
  4.  #include<ctype.h>
  5.  
  6.  int main(){
  7.  
  8.  char cad[51];
  9.  int l=0,i=0,aux;
  10.  
  11.  printf("*******LONGITUD CADENA ALEATORIA*******\n");
  12.  srand(time(NULL));
  13.  l=(rand()%57 )+ 15;
  14.  printf("la longitud es %d\n",l);
  15.  for(i=0;i<l;i++){
  16. cad[i]=(rand()%25)+65;
  17.  
  18.  
  19.  printf("%c",cad[i]);
  20.  
  21.  }
  22.  return 0;
  23.  }
  #3 (permalink)  
Antiguo 12/04/2010, 12:12
 
Fecha de Ingreso: marzo-2010
Mensajes: 127
Antigüedad: 14 años, 1 mes
Puntos: 2
Respuesta: Cadena de caracteres aleatorios

Madre mia lo que me ha costado

jiji
lo consegui el codigo final y bueno es el siguiente:

Código C:
Ver original
  1. #include<stdio.h>
  2.  #include<time.h>
  3.  #include<stdlib.h>
  4.  #include<ctype.h>
  5.  
  6.  int main(){
  7.  
  8.  char cad[51];
  9.  int l=0,i=0,aux;
  10.  
  11.  printf("*******LONGITUD CADENA ALEATORIA*******\n");
  12.  srand(time(NULL));
  13.  l=(rand()&#37;34)+ 15;
  14.  printf("la longitud es %d\n",l);
  15.  for(i=0;i<l;i++){
  16. aux=(rand()%56)+65; //EL 56 sale de( VALOR MAX ES 122(z)-65(A)+1) y el 65 es el minimo ya que ahi empieza el valor de A
  17. if(aux<90 || aux>97){   //me quito con este if los valores que no son letras y que estan entre el 90 y el 97(simbolos raros)..
  18. cad[i]=aux;            //si cumple la condicion lo guardo en mi cadena..
  19. printf("%c",cad[i]);   //visualizo mi cadena
  20.   }
  21.  }
  22.  return 0;
  23.  }

Voy a llorar pero de felicidad xD,

Última edición por roser24; 12/04/2010 a las 12:24
  #4 (permalink)  
Antiguo 12/04/2010, 12:25
 
Fecha de Ingreso: marzo-2010
Mensajes: 127
Antigüedad: 14 años, 1 mes
Puntos: 2
Respuesta: Cadena de caracteres aleatorios

bueno la fila 13 esta mal pero la pagina no me deja corregirlo .. el codigo de esa linea es el siguiente:
l=(rand() % 34)+ 15;
bueno y tmb añadi un else en el cual decremento mi i-- si no se cumple la condicion del if asi voy a por la letra siempre .. no se ke les parece? estara bien o lo estoy haciendo mal?

Última edición por roser24; 12/04/2010 a las 12:39
  #5 (permalink)  
Antiguo 12/04/2010, 15:20
 
Fecha de Ingreso: marzo-2010
Mensajes: 127
Antigüedad: 14 años, 1 mes
Puntos: 2
Respuesta: Cadena de caracteres aleatorios

Hola chicos,siguiendo con el ejercicio hay una parte que nome sale para nada no se como quedarme con la ultima ubicacion de un caracter de la cadena.-.la primera si pero la ultima no me lo guarda..
Código C:
Ver original
  1. /*20.   Generar la longitud de la cadena aleatoriamente y la propia cadena de
  2. caracteres (tanto en mayúsculas como en minúsculas) de 50 caracteres útiles
  3. como máximo y 15 como mínimo. Buscar dentro de ella la primera y última
  4. ocurrencia de un carácter leído por teclado indepen-dientemente de si se almaceno
  5. en mayúsculas o minúsculas, indicando la
  6.  posición donde se encuentra dentro de la cadena o el mensaje correspondiente si
  7.  no se encontró.*/
  8.  
  9.  #include<stdio.h>
  10.  #include<time.h>
  11.  #include<stdlib.h>
  12.  #include<ctype.h>
  13.  #include<string.h>
  14.  
  15.  int main(){
  16.  
  17.  char cad[51],letra;
  18.  int l=0,i=0,aux,flag=0,pos=0,posf=0;
  19.  
  20.  printf("*******LONGITUD CADENA ALEATORIA*******\n");
  21.  srand(time(NULL));
  22.  l=(rand()% 34)+ 15;
  23.  printf("la longitud es %d\n",l);
  24.  printf("La cadena de caracteres aleatorios es:\n");
  25.  for(i=0;i<l;i++){
  26. aux=(rand()%56)+65; //EL 56 sale de( VALOR MAX ES 122(z)-65(A)+1) y el 65 es el minimo ya que ahi empieza el valor de A
  27. if(aux<90 || aux>97){   //me quito con este if los valores que no son letras y que estan entre el 90 y el 97(simbolos raros)..
  28. cad[i]=aux;            //si cumple la condicion lo guardo en mi cadena..
  29. printf("%c,%d\n",cad[i],i);   //visualizo mi cadena
  30.   }
  31.   else{
  32.   i--;
  33.   }
  34.  }
  35.  printf("Introduce un caracter a buscar:\n");
  36.  scanf("%c",&letra);
  37.  letra=tolower(letra);
  38.  for(i=0;i<l;i++){
  39.  if(cad[i]==letra){         //Desde aqui
  40.  
  41.  
  42.   flag=1;
  43.     pos=i;
  44.  
  45.     }
  46.     if(pos<=i){
  47.     posf=i;
  48.  
  49.     }
  50.  
  51.  
  52.   }
  53.                               // hasta aqui no se como guardar la ultima ocurrencia del caracter..
  54.  if(flag==1){
  55.  printf("la letra %c se encontro en la cadena \n",letra);
  56.  printf("la primera ocurrencia es en %i\n",pos);
  57.  printf("la ultima ocurrencia es en %i\n",posf);
  58.  }
  59.  else{
  60.  printf("La letra %c No se encontro en la cadena\n",letra);
  61.  }
  62.  return 0;
  63.  }
  #6 (permalink)  
Antiguo 12/04/2010, 16:12
aguirremanuel
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Cadena de caracteres aleatorios

Modifica tu for por este :

Código C++:
Ver original
  1. for(i=0;i<l;i++){
  2.  if( tolower(cad[i]) == letra )
  3.  {          
  4.     if (flag == 0) //si es la primera ves que coinciden flag valdrá 0
  5.     {
  6.         flag = 1 ;
  7.         pos = i ;
  8.     }
  9.     else //las proximas veces se guardara la posicion en posf
  10.     {
  11.         posf = i ;
  12.     }
  13.  }
  14. }

Suerte y Saludos...!!!
  #7 (permalink)  
Antiguo 12/04/2010, 16:57
 
Fecha de Ingreso: agosto-2008
Mensajes: 271
Antigüedad: 15 años, 8 meses
Puntos: 2
Respuesta: Cadena de caracteres aleatorios

Hola

Hay otra forma, también puedes crear otro array para almacenar todas las posiciones en donde se encuentre la cadena a buscar(todas las ocurrencias de una cadena contenida en otra), y si quieres la ultima pues fácil esta en la ultima posición del arreglo. Para eso tambien tendrías que usar una variable extra que se inicialice fuera del for en 0 y solo se incremente cuando encuentre una coincidencia, esa variable llevara el indice en el nuevo array de posiciones de ocurrencias de una cadena.

Saludos,

Fenris
  #8 (permalink)  
Antiguo 13/04/2010, 11:57
 
Fecha de Ingreso: marzo-2010
Mensajes: 127
Antigüedad: 14 años, 1 mes
Puntos: 2
De acuerdo Respuesta: Cadena de caracteres aleatorios

MIl GRACIAS chicos Manuel y Fenri,corregi mi codigo y se ejecuta hermosamente ,pongo el codigo final por si algun estudiante de C como yo tiene algun problema parecido =),

Código C:
Ver original
  1. /*/*20. Generar la longitud de la cadena aleatoriamente y la propia cadena de
  2. caracteres (tanto en mayúsculas como en minúsculas) de 50 caracteres útiles
  3. como máximo y 15 como mínimo. Buscar dentro de ella la primera y última
  4. ocurrencia de un carácter leído por teclado indepen-dientemente de si se almaceno
  5. en mayúsculas o minúsculas, indicando la
  6.  posición donde se encuentra dentro de la cadena o el mensaje correspondiente si
  7.  no se encontró.*/
  8.  
  9.  #include<stdio.h>
  10.  #include<time.h>
  11.  #include<stdlib.h>
  12.  #include<ctype.h>
  13.  #include<string.h>
  14.  
  15.  int main(){
  16.  
  17.  char cad[51],letra;
  18.  int l=0,i=0,aux,flag=0,pos=0,posf=0;
  19.  
  20.  printf("*******LONGITUD CADENA ALEATORIA*******\n");
  21.  srand(time(NULL));
  22.  l=(rand()% 34)+ 15;
  23.  printf("la longitud es %d\n",l);
  24.  printf("La cadena de caracteres aleatorios es:\n");
  25.  for(i=0;i<l;i++){
  26. aux=(rand()%56)+65; //EL 56 sale de( VALOR MAX ES 122(z)-65(A)+1) y el 65 es el minimo ya que ahi empieza el valor de A
  27. if(aux<90 || aux>97){   //me quito con este if los valores que no son letras y que estan entre el 90 y el 97(simbolos raros)..
  28. cad[i]=aux;            //si cumple la condicion lo guardo en mi cadena..
  29. printf(" %c     %d\n",cad[i],i);   //visualizo mi cadena
  30.   }
  31.   else{
  32.   i--;
  33.   }
  34.  }
  35.  printf("Introduce un caracter a buscar:\n");
  36.  scanf("%c",&letra);
  37.  
  38.  for(i=0;i<l;i++){
  39.  if(tolower(cad[i])== letra){
  40.  
  41.  if(flag==0){         //Si es la primera vez que coinciden flag valdra 0;
  42.  
  43.  
  44.   flag=1;
  45.     pos=i;
  46.  
  47.     }
  48.     else{//las proximas veces guardara la posicion en posf
  49.     posf=i;
  50.  
  51.     }
  52.  
  53.  
  54.   }
  55.   }
  56.  if(flag==1){
  57.  printf("la letra %c se encontro en la cadena \n",letra);
  58.  printf("la primera ocurrencia fue en la posicion  %i\n",pos);
  59.  printf("la ultima ocurrencia fue en la posicion %i\n",posf);
  60.  }
  61.  else{
  62.  printf("La letra %c No se encontro en la cadena\n",letra);
  63.  }
  64.  return 0;
  65.  }
  #9 (permalink)  
Antiguo 13/04/2010, 12:23
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: Cadena de caracteres aleatorios

Cuidado si la letra aparece solo 1 vez. posf no tendrá valor correcto.
  #10 (permalink)  
Antiguo 13/04/2010, 13:26
 
Fecha de Ingreso: marzo-2010
Mensajes: 127
Antigüedad: 14 años, 1 mes
Puntos: 2
Respuesta: Cadena de caracteres aleatorios

Hola,Carlgary pos si gracias por repasar mi codigo efectivamente se me paso lo de si solo aparecia una vez,.. vaya pasada como son aleatorios casi siempre se repetian las letras cuando la longitud era grande y me costo probarlo jiji

bueno el Codigo Final es ... :

Código C:
Ver original
  1. /*/*20. Generar la longitud de la cadena aleatoriamente y la propia cadena de
  2. caracteres (tanto en mayúsculas como en minúsculas) de 50 caracteres útiles
  3. como máximo y 15 como mínimo. Buscar dentro de ella la primera y última
  4. ocurrencia de un carácter leído por teclado indepen-dientemente de si se almaceno
  5. en mayúsculas o minúsculas, indicando la
  6.  posición donde se encuentra dentro de la cadena o el mensaje correspondiente si
  7.  no se encontró.*/
  8.  
  9.  #include<stdio.h>
  10.  #include<time.h>
  11.  #include<stdlib.h>
  12.  #include<ctype.h>
  13.  #include<string.h>
  14.  
  15.  int main(){
  16.  
  17.  char cad[51],letra;
  18.  int l=0,i=0,aux,flag=0,pos=0,posf=0;
  19.  
  20.  printf("*******LONGITUD CADENA ALEATORIA*******\n");
  21.  srand(time(NULL));
  22.  l=(rand()% 34)+ 15;
  23.  printf("la longitud es %d\n",l);
  24.  printf("La cadena de caracteres aleatorios es:\n");
  25.  for(i=0;i<l;i++){
  26. aux=(rand()%56)+65; //EL 56 sale de( VALOR MAX ES 122(z)-65(A)+1) y el 65 es el minimo ya que ahi empieza el valor de A
  27. if(aux<90 || aux>97){   //me quito con este if los valores que no son letras y que estan entre el 90 y el 97(simbolos raros)..
  28. cad[i]=aux;            //si cumple la condicion lo guardo en mi cadena..
  29. printf(" %c     %d\n",cad[i],i);   //visualizo mi cadena
  30.   }
  31.   else{
  32.   i--;
  33.   }
  34.  }
  35.  printf("Introduce un caracter a buscar:\n");
  36.  scanf("%c",&letra);
  37.  
  38.  for(i=0;i<l;i++){
  39.  if(tolower(cad[i])== letra){
  40.  
  41.  if(flag==0){         //Si es la primera vez que coinciden flag valdra 0;
  42.  
  43.  
  44.   flag=1;
  45.     pos=i;
  46.     posf=i;
  47.     }
  48.     else{//las proximas veces guardara la posicion en posf
  49.     posf=i;
  50.  
  51.     }
  52.  
  53.  
  54.   }
  55.   }
  56.  if(flag==1 && posf>pos){
  57.  printf("la letra %c se encontro en la cadena \n",letra);
  58.  printf("la primera ocurrencia de la letra %c fue en la posicion %i\n",letra,pos);
  59.     printf("la ultima ocurrencia de la letra %c fue en la posicion %i",letra,posf);
  60.  
  61. }else if(pos==posf){
  62. printf("Solo se encontro una ocurrencia de %c en la cadena cuya posicion es %i\n",letra,pos);
  63. }
  64. else{
  65.  printf("La letra %c No se encontro en la cadena\n",letra);
  66.  }
  67.  
  68.  
  69.  return 0;
  70.  }

Etiquetas: caracteres, aleatoria, cadenas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 17:44.