• Miércoles 20 de Noviembre de 2024, 08:27

Autor Tema:  Como hago esto soy novato en C  (Leído 1619 veces)

Programming C++

  • Miembro activo
  • **
  • Mensajes: 31
    • Ver Perfil
Como hago esto soy novato en C
« en: Viernes 23 de Julio de 2010, 23:19 »
0
Como puedo ordenar esta serie de caracteres M,J,R,A,S,P y quede de esta manera P,S,A,R,J,M . he usado una funcion para el tamaño del vector.

Código: C
  1.  
  2. #include <stdio.h>
  3. void cambio (int v);
  4. main()
  5. {
  6. int v2:
  7. clrscr();
  8. printf("Cuantos elementos tendra el vector");
  9. scanf("%d", &v2);
  10. cambio (v2);
  11. }
  12. void cambio (int v)
  13. {
  14.  
  15.  

he realizado otro pero es de tipo ordenacion alfabeticamente pero no se si funcione en este la verdad estoy totalmente enrredado alguna ayuda se le agradeceria demasiado.

SkullFlower

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Re: Como hago esto soy novato en C
« Respuesta #1 en: Sábado 24 de Julio de 2010, 01:27 »
0
Hola,

bueno según lo que te entendí es que quieres que se guarde la cadena al revés en otra?

sí es así entonces esto fue lo que hice yo (a ver si te sirve):

Código: C
  1. #include<stdio.h>
  2. int main(){
  3.     char s1[] = "MJRASP";
  4.     int i,j;
  5.     char s2[sizeof(s1)];
  6.     j = sizeof(s1)-2;
  7.     i = 0;
  8.     for(j;j>=0;j--, i++){
  9.         s2[i]=s1[j];
  10.         if(j==0){
  11.             s2[i+1]='';
  12.         }
  13.     }
  14.     printf("%sn", s2);
  15.     return 0;
  16. }
  17.  

Amilius

  • Miembro HIPER activo
  • ****
  • Mensajes: 665
    • Ver Perfil
Re: Como hago esto soy novato en C
« Respuesta #2 en: Sábado 24 de Julio de 2010, 03:32 »
0
Si los caracteres están en una cadena terminada en carácter 0:

Código: C++
  1.  
  2. #include <stdio.h>
  3.  
  4. char* reversaDeCadena(char* cadena)
  5. {
  6.     // Necesitamos un char temporal, un puntero al inicio y otro al final de la cadena
  7.     char temp, *inicio, *final;
  8.     // Asignar a inicio cadena, asignar a final inicio.
  9.     final = inicio = cadena;
  10.     // Buscamos el final de la cadena: el char 0
  11.     while (*final++);
  12.     // Necesitamos apuntar al último char no al siguiente después del 0
  13.     final -= 2;
  14.     // Intercambiamos hasta llegar a la mitad, el resto ya estará en reversa
  15.     while (inicio < final)
  16.     {
  17.         temp = *inicio;
  18.         // Apuntar al siguiente desde el inicio, después de asignar el apuntado por final al apuntado por inicio.
  19.         *inicio++ = *final;
  20.         // Apuntar al anterior desde el final, después de asignar al apuntado por final.
  21.         *final-- = temp;
  22.     }
  23.     return cadena;
  24. }
  25.  
  26. int main()
  27. {
  28.     char s[] = "MJRASP";
  29.     printf("%sn", reversaDeCadena(s));
  30.     return 0;
  31. }
  32.  
  33.  

O también puedes usar una de las funciones definidas en string.h:

Código: C++
  1.  
  2. #include <stdio.h>
  3. #include <string.h>
  4. int main()
  5. {
  6.     char s[] = "MJRASP";
  7.     printf("%sn", _strrev(s));
  8.     return 0;
  9. }
  10.  
  11.  

Programming C++

  • Miembro activo
  • **
  • Mensajes: 31
    • Ver Perfil
Re: Como hago esto soy novato en C
« Respuesta #3 en: Domingo 1 de Agosto de 2010, 08:21 »
0
el ultimo que me dieron pues es genial :) se nota que ha reducido lineas de codigos con solo llamar la libreria string.h.

Muchas gracias :D  :)  seguire practicando C/C++