Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Beginner Web en 5 Julio 2018, 21:53 pm



Título: Ayuda con subcadena de tipo char
Publicado por: Beginner Web en 5 Julio 2018, 21:53 pm
Queria saber si alguien me puede decir el camino mas corto para extraer cadenas empleando un arreglo de caracteres sin utilizar la clases string, esto es lo que quiero hacer pero con el tipo de dato char

Código
  1. #include <iostream>
  2. #include <string.h>
  3.  
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8. int opcion;
  9. string fecha;
  10. cout << "INGRESE UNA FECHA EN EL FORMATO DDMMAAAA: ";
  11. getline(cin, fecha);
  12. cout << "ELEGIR FORMATO" << endl;
  13. cout << "1. MM/DD/AAAA" << endl;
  14. cout << "2. DD/MM/AAAA" << endl;
  15. cout << "3. AAAA/MM/DD" << endl;
  16. cin >> opcion;
  17.  
  18. switch(opcion){
  19.  
  20. case 1: cout << fecha.substr(2,2) <<"/" << fecha.substr(0,2) << "/" << fecha.substr(4,4) << endl ;break;
  21. case 2: cout << fecha.substr(0,2) <<"/" << fecha.substr(2,2) << "/" << fecha.substr(4,4) << endl ;break;
  22. case 3: cout << fecha.substr(4,4) <<"/" << fecha.substr(2,2) << "/" << fecha.substr(0,2) << endl ;break;
  23. default: cout << "OPCION INCORRECTA" << endl;
  24. }
  25. system("pause");
  26. return 0;
  27. }

Esto es lo que logre, la verdad me dan mas problemas los de tipo char, en cambio con la clase string nunca tuve problemas  ;-)

Código
  1. #include <iostream>
  2. #include <string.h>
  3.  
  4. using namespace std;
  5.  
  6. const int MAX=8;
  7. typedef char tcad[MAX];
  8.  
  9. int main()
  10. {
  11. tcad fecha;
  12. char dia[2], mes[2], año[4];
  13. int opcion;
  14. cout << "Ingrese un afecha en formato DD/MM/AAAA: ";
  15. cin.getline(fecha,9,'\n');
  16. dia[0]=fecha[0];
  17. dia[1]=fecha[1];
  18. mes[0]=fecha[2];
  19. mes[1]=fecha[3];
  20. año[0]=fecha[4];
  21. año[1]=fecha[5];
  22. año[2]=fecha[6];
  23. año[3]=fecha[7];
  24. cout << "Seleccione formato" << endl;
  25. cout << "1. MM/DD/AAAA" << endl;
  26. cout << "2. DD/MM/AAAA" << endl;
  27. cout << "3. AAAA/MM/DD" << endl;
  28. cin >> opcion;
  29. switch(opcion){
  30. case 1: cout << mes << "/" << dia << "/" << año << endl; break;
  31. case 2: cout << dia << "/" << mes << "/" << año << endl; break;
  32. case 3: cout << año << "/" << mes << "/" << dia << endl; break;
  33. default: cout << "Opcion incorrecta" << endl;
  34. }
  35. system("pause");
  36. return 0;
  37. }

Desde ya muchas gracias, saludos  ;-)


Título: Re: Ayuda con subcadena de tipo char
Publicado por: engel lex en 5 Julio 2018, 22:11 pm
la solucion tradicional sería esta

Código
  1. #include <iostream>
  2. using namespace std;
  3. int main() {
  4.  int d, m, y;
  5.  char x1, x2;
  6.  cout << "Ingrese fecha: ";
  7.  cin >> d >> x1 >> m >> x2 >> y;
  8.  cout << "Fecha: " << y << "-" << m << "-" << d << endl;
  9.  return 0;
  10. }
  11.  

lo que haces es dejar que cin separe por tipos


así mismo tambien podrías usar <cstdio> y usar scanf y usar su formato de toda la vida


Título: Re: Ayuda con subcadena de tipo char
Publicado por: Beginner Web en 5 Julio 2018, 22:41 pm
Mmmmm no responde mi duda  :silbar:

Quiero hacer lo mas parecido posible a esto pero utilizando cadena de caracteres "char" no string


Código
  1. #include <iostream>
  2. #include <string.h>
  3.  
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8. int opcion;
  9. string fecha;
  10. cout << "INGRESE UNA FECHA EN EL FORMATO DDMMAAAA: ";
  11. getline(cin, fecha);
  12. cout << "ELEGIR FORMATO" << endl;
  13. cout << "1. MM/DD/AAAA" << endl;
  14. cout << "2. DD/MM/AAAA" << endl;
  15. cout << "3. AAAA/MM/DD" << endl;
  16. cin >> opcion;
  17.  
  18. switch(opcion){
  19.  
  20. case 1: cout << fecha.substr(2,2) <<"/" << fecha.substr(0,2) << "/" << fecha.substr(4,4) << endl ;break;
  21. case 2: cout << fecha.substr(0,2) <<"/" << fecha.substr(2,2) << "/" << fecha.substr(4,4) << endl ;break;
  22. case 3: cout << fecha.substr(4,4) <<"/" << fecha.substr(2,2) << "/" << fecha.substr(0,2) << endl ;break;
  23. default: cout << "OPCION INCORRECTA" << endl;
  24. }
  25. system("pause");
  26. return 0;
  27. }


Título: Re: Ayuda con subcadena de tipo char
Publicado por: engel lex en 5 Julio 2018, 22:53 pm
ok XD creo que me desvié...

por cierto las librerías standard no llevan .h eso es la librería de C, la de C++ es <cstring>

creo que buscas es strtok de cstring

http://www.cplusplus.com/reference/cstring/strtok/ (http://www.cplusplus.com/reference/cstring/strtok/)


Título: Re: Ayuda con subcadena de tipo char
Publicado por: Beginner Web en 6 Julio 2018, 00:50 am
Ah ciertos es, no es string.h; igual no logro conseguir nada parecido a lo que busco


Título: Re: Ayuda con subcadena de tipo char
Publicado por: engel lex en 6 Julio 2018, 00:53 am
qué exactamente quieres lograr entonces?


Título: Re: Ayuda con subcadena de tipo char
Publicado por: Beginner Web en 6 Julio 2018, 02:04 am
Saber si hay alguna funcion que devuelva subcadena de un arreglo de caracteres similar a subsrt(); de la clase string,  no se si me explique bien , de todas maneras pensaba seguir manejandome con la clase string ;-)


Título: Re: Ayuda con subcadena de tipo char
Publicado por: engel lex en 6 Julio 2018, 02:11 am
no... char es un tipo primitivo y string es una librería de C, C se  basa mucho en la eficiencia de memoria y lo que indicas implica copiar la memoria a otro lugar (para extraer un substring), no hay tecnicas de una sola linea


Título: Re: Ayuda con subcadena de tipo char
Publicado por: Beginner Web en 6 Julio 2018, 04:16 am
Y que tecnica me recomendaria para extraer los dos primeros caracteres de un tipo char[]="HOLA MUNDO"; ????????? Ya sea copiandola en otra variable de tipo char , ando loco es lo ultimo que me falta  ;-)


Título: Re: Ayuda con subcadena de tipo char
Publicado por: engel lex en 6 Julio 2018, 04:29 am
hmm revisando hay algo que en C no se puede por lo que creo, pero C++ si (por la forma en que funcion cout)

Código
  1. #include <cstring>
  2. #include <iostream>
  3. using namespace std;
  4. int main()
  5. {
  6.    int inicio = 0, largo = 2;
  7.    char texto[] = "algo"
  8.    cout << strndup(texto+inicio, largo) << endl;
  9.    return 0;
  10. }
  11.  
  12.  

recomiendo cuidado al usarlo, recomiendo leer la documentacion