C/Visual C - Ayuda con un programa con cadenas

   
Vista:

Ayuda con un programa con cadenas

Publicado por Facu (1 intervención) el 21/09/2015 23:24:33
Buen dia gente. Estoy teniendo problemas con un ejercicio de cadenas de caracteres. Algun consejo? El ejercicio es el siguiente:

Hacer una función que permita insertar en una secuencia de dígitos los caracteres guión cada 8 dígitos a partir del cuarto dígito, y un espacio cada 8 dígitos a partir del octavo dígito. Si la cantidad de dígitos no es múltiplo de ocho agregar delante de la cadena caracteres ‘0’ hasta que la misma sea múltiplo de 8.

Ejemplos:

472348237388539055823012 ---------> 4723-4823 7388-5390 5582-3012
8237388539055823012 ---------> 0000-0823 7388-5390 5582-3012
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Ayuda con un programa con cadenas

Publicado por aguml (173 intervenciones) el 22/09/2015 12:41:39
Mira a ver si te vale algo asi:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <stdio.h>
#include <string.h>
 
#define MAXCADENA 48
#define MAXSEPARADORES 11
 
int main(int argc, char* argv[])
{
   char cadena[MAXCADENA+1], salida[MAXCADENA+MAXSEPARADORES+1]={0};
   int largo, ceros, guiones=0, espacios=0, x,y;
 
   //Pido la cadena
   printf("Introduce la cadena (Maximo %i caracteres): ", MAXCADENA);
   fgets(cadena, MAXCADENA, stdin);
 
   //Obtengo su largo
   largo = strlen(cadena);
 
   //Coloco el caracter de fin de cadena al final de la cadena
   cadena[largo-1]='\0';
 
   //Vuelvo a obtener su largo
   largo = strlen(cadena);
 
   //Obtengo el numero de ceros a colocar al principio de la cadena de salida
   for(x=largo; x%8 != 0; x++);
   ceros = x-largo;
 
   //Colocos todos los ceros necesarios al inicio de la cadena de salida
   memset(salida,'0',ceros);
 
   //Concateno detras la cadena introducida
   strcat(salida,cadena);
 
   //Limplio la memoria de la cadena
   memset(cadena,0,MAXCADENA+1);
 
   //Copio en ella la cadena obtenida despues de concatenar los ceros
   strcpy(cadena,salida);
 
   //Limpio la memoria de la cadena de salida
   memset(salida,0,MAXCADENA+MAXSEPARADORES+1);
 
   //Obtengo el largo de la cadena con los ceros concatenados
   largo = strlen(cadena);
 
   //Recorro la cadena con los ceros concatenados
   for(x=0;x<largo;x++){
      if(((x+4)%8)==0){ ////Empezando desde el 4º caracter, cada 8 caracteres
         salida[x+guiones+espacios]='-'; //Añado un guion en la cadena de salida
         salida[x+guiones+espacios+1]=cadena[x]; //Coloco detras el caracter de la cadena
         guiones++; //incremento la variable que almacena el numero de guiones colocados
      }else if((x%8)==0){ //Empezando desde el principio, cada 8 caracteres
         salida[x+guiones+espacios]=' '; //Añado un espacio en la cadena de salida
         salida[x+guiones+espacios+1]=cadena[x]; //Coloco detras el caracter de la cadena
         espacios++; //incremento la variable que almacena el numero de espacios colocados
      }else{ //Si no se cumplen los anteriores casos copio el caracter de cadena
         salida[x+guiones+espacios]=cadena[x];
      }
   }
 
   //Muestro el resultado
   printf("Resultado: %s",salida);
   getchar();
   return 0;
}
//---------------------------------------------------------------------------

Se podria hacer sin las funciones de string.h pero depende de lo que te hayan pedido:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <stdio.h>
 
#define MAXCADENA 48
#define MAXSEPARADORES 11
 
int main(int argc, char* argv[])
{
   char cadena[MAXCADENA+1], salida[MAXCADENA+MAXSEPARADORES+1]={0};
   int largo, ceros, guiones=0, espacios=0, x,y;
 
   //Pido la cadena
   printf("Introduce la cadena (Maximo %i caracteres): ", MAXCADENA);
   fgets(cadena, MAXCADENA, stdin);
 
   //Obtengo su largo
   for(x=0,largo=0;cadena[x] != '\0' && cadena[x] != '\n'; x++, largo++);
 
   //Coloco el caracter de fin de cadena al final de la cadena
   cadena[largo]='\0';
 
   //Obtengo el numero de ceros a colocar al principio de la cadena de salida
   for(x=largo; x%8 != 0; x++);
   ceros = x-largo;
 
   //Coloco todos los ceros necesarios al inicio de la cadena de salida
   for(x=0; x < ceros; salida[x]='0', x++);
 
   //Concateno detras la cadena introducida
   for(x = 0; cadena[x] != '\0'; salida[x + ceros]=cadena[x], x++);
 
   //Limplio la memoria de la cadena
   for(x = 0; x <= MAXCADENA; cadena[x]='\0', x++);
 
   //Copio en ella la cadena obtenida despues de concatenar los ceros
   for(x = 0; salida[x] != '\0'; cadena[x] = salida[x], x++);
 
   //En x al salir tengo el largo de la cadena con los ceros concatenados
   largo=x;
 
   //Limpio la memoria de la cadena de salida
   for(x=0; x <= (MAXCADENA + MAXSEPARADORES); salida[x]='\0', x++);
 
   //Recorro la cadena con los ceros concatenados
   for(x=0;x<largo;x++){
      if(((x+4)%8)==0){ ////Empezando desde el 4º caracter, cada 8 caracteres
         salida[x+guiones+espacios]='-'; //Añado un guion en la cadena de salida
         salida[x+guiones+espacios+1]=cadena[x]; //Coloco detras el caracter de la cadena
         guiones++; //incremento la variable que almacena el numero de guiones colocados
      }else if((x%8)==0){ //Empezando desde el principio, cada 8 caracteres
         salida[x+guiones+espacios]=' '; //Añado un espacio en la cadena de salida
         salida[x+guiones+espacios+1]=cadena[x]; //Coloco detras el caracter de la cadena
         espacios++; //incremento la variable que almacena el numero de espacios colocados
      }else{ //Si no se cumplen los anteriores casos copio el caracter de cadena
         salida[x+guiones+espacios]=cadena[x];
      }
   }
 
   //Muestro el resultado
   printf("Resultado: %s",salida);
   getchar();
   return 0;
}
//---------------------------------------------------------------------------
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar