Ayuda con subcadena de tipo char

Iniciado por Beginner Web, 5 Julio 2018, 21:53 PM

0 Miembros y 2 Visitantes están viendo este tema.

Beginner Web

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 (cpp) [Seleccionar]
#include <iostream>
#include <string.h>

using namespace std;

int main()
{
int opcion;
string fecha;
cout << "INGRESE UNA FECHA EN EL FORMATO DDMMAAAA: ";
getline(cin, fecha);
cout << "ELEGIR FORMATO" << endl;
cout << "1. MM/DD/AAAA" << endl;
cout << "2. DD/MM/AAAA" << endl;
cout << "3. AAAA/MM/DD" << endl;
cin >> opcion;

switch(opcion){

case 1: cout << fecha.substr(2,2) <<"/" << fecha.substr(0,2) << "/" << fecha.substr(4,4) << endl ;break;
case 2: cout << fecha.substr(0,2) <<"/" << fecha.substr(2,2) << "/" << fecha.substr(4,4) << endl ;break;
case 3: cout << fecha.substr(4,4) <<"/" << fecha.substr(2,2) << "/" << fecha.substr(0,2) << endl ;break;
default: cout << "OPCION INCORRECTA" << endl;
}
system("pause");
return 0;
}


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 (cpp) [Seleccionar]
#include <iostream>
#include <string.h>

using namespace std;

const int MAX=8;
typedef char tcad[MAX];

int main()
{
tcad fecha;
char dia[2], mes[2], año[4];
int opcion;
cout << "Ingrese un afecha en formato DD/MM/AAAA: ";
cin.getline(fecha,9,'\n');
dia[0]=fecha[0];
dia[1]=fecha[1];
mes[0]=fecha[2];
mes[1]=fecha[3];
año[0]=fecha[4];
año[1]=fecha[5];
año[2]=fecha[6];
año[3]=fecha[7];
cout << "Seleccione formato" << endl;
cout << "1. MM/DD/AAAA" << endl;
cout << "2. DD/MM/AAAA" << endl;
cout << "3. AAAA/MM/DD" << endl;
cin >> opcion;
switch(opcion){
case 1: cout << mes << "/" << dia << "/" << año << endl; break;
case 2: cout << dia << "/" << mes << "/" << año << endl; break;
case 3: cout << año << "/" << mes << "/" << dia << endl; break;
default: cout << "Opcion incorrecta" << endl;
}
system("pause");
return 0;
}


Desde ya muchas gracias, saludos  ;-)
7w7

engel lex

la solucion tradicional sería esta

Código (cpp) [Seleccionar]
#include <iostream>
using namespace std;
int main() {
  int d, m, y;
  char x1, x2;
  cout << "Ingrese fecha: ";
  cin >> d >> x1 >> m >> x2 >> y;
  cout << "Fecha: " << y << "-" << m << "-" << d << endl;
  return 0;
}


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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Beginner Web

#2
Mmmmm no responde mi duda  :silbar:

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


Código (cpp) [Seleccionar]
#include <iostream>
#include <string.h>

using namespace std;

int main()
{
int opcion;
string fecha;
cout << "INGRESE UNA FECHA EN EL FORMATO DDMMAAAA: ";
getline(cin, fecha);
cout << "ELEGIR FORMATO" << endl;
cout << "1. MM/DD/AAAA" << endl;
cout << "2. DD/MM/AAAA" << endl;
cout << "3. AAAA/MM/DD" << endl;
cin >> opcion;

switch(opcion){

case 1: cout << fecha.substr(2,2) <<"/" << fecha.substr(0,2) << "/" << fecha.substr(4,4) << endl ;break;
case 2: cout << fecha.substr(0,2) <<"/" << fecha.substr(2,2) << "/" << fecha.substr(4,4) << endl ;break;
case 3: cout << fecha.substr(4,4) <<"/" << fecha.substr(2,2) << "/" << fecha.substr(0,2) << endl ;break;
default: cout << "OPCION INCORRECTA" << endl;
}
system("pause");
return 0;
}
7w7

engel lex

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/
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Beginner Web

Ah ciertos es, no es string.h; igual no logro conseguir nada parecido a lo que busco
7w7

engel lex

qué exactamente quieres lograr entonces?
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Beginner Web

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 ;-)
7w7

engel lex

#7
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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Beginner Web

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  ;-)
7w7

engel lex

hmm revisando hay algo que en C no se puede por lo que creo, pero C++ si (por la forma en que funcion cout)

#include <cstring>
#include <iostream>
using namespace std;
int main()
{
   int inicio = 0, largo = 2;
   char texto[] = "algo"
   cout << strndup(texto+inicio, largo) << endl;
   return 0;
}



recomiendo cuidado al usarlo, recomiendo leer la documentacion
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.