Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: snoopty en 4 Diciembre 2021, 06:25 AM

Título: Duda en una Línea de Codigo
Publicado por: snoopty en 4 Diciembre 2021, 06:25 AM
En el Codigo que dejo más abajo me sucede que
La línea ( análoga a la de " texto = .... " )
" " numeros = numeros + alfanumerico [ a ] ; " "
la única manera en que la entiendo ( más allá del mi comentario al lado ) es pensandola como un contador tipo " i = i + 1 ( 1 sería el prox Nro que encuentre ) "
....... Si pensarlo así está mal o bien, igualmente lo que no me cierra del todo es el " + " que suma dos variables
pero que ambas no tienen afinidad absoluta entre sí - o sea no es que " numeros = 8 y alfanumerico [ a ] = 17 ; o sea,
pensándolo como tipo de Datos ....  ¡ string = string + char ( ? ) !!!! ( aunque sea cierto q la 2da variable sea un a
rray de la 1era - cuyo subíndice es el contador principal - ) ; ¿ Hay otra forma más clara de entenderlo ? (( X otra parte, si me explicarían porqué puedo prescindir de declarar la biblioteca CCTYPE - función isdigit - ..... pues si no la declaro el Codigo funciona igual ( ? ) ))

Código (cpp) [Seleccionar]
#include <iostream>
#include <cstdlib>
#include <cctype>
using namespace std;

char alfanumerico[100];


string numeros;

string texto;


int main( )
{

int a = 0;


cout << "Ingrese N\243meros y Letras MEZCLADOS :" << endl;

cin >> alfanumerico;

// " a " va a referir a cada uno de los Elementos del 'Array', desde el " [0] ",
// hasta el último que se ingrese " [ ' n ' ] "
while ( a < ( sizeof ( alfanumerico ) - 1 ) ) // Que se evalúe la existencia, desde
                                              // lo cuantitativo, de  un Elemento
                                              // del 'Array' que sea menor al
                                              // tamaño total del 'Array'
{

if ( isdigit ( alfanumerico [a] ) )
{

numeros = numeros + alfanumerico [a]; // "  Viene a ser como un ''' i = i + 1 '''  "
                                      // Si en el 'Array' ya había un Nro, que éste
                                      // se almacene y busque el próximo para
                                      // también almacenarlo en la Var " numeros "

}
else
{

texto = texto + alfanumerico [a];     // Si en el 'Array' ya había una Letra, que ésta
                                      // se almacene y busque la próxima para
                                      // también almacenarla en la Var " texto "


}

a ++;

}

cout << "Los N\243meros son :" << numeros << endl;

cout << "Las Letras son :" << texto << endl;


system ("pause");
}















Título: Re: Duda en una Línea de Codigo
Publicado por: Eternal Idol en 4 Diciembre 2021, 09:42 AM
Estas trabajando con objetos y al sumar una cadena y un caracter se llama a un operador + sobrecargado que se encarga de hacer el trabajo necesario para agregar un caracter en una cadena.

https://en.cppreference.com/w/cpp/string/basic_string/operator%2B

Tu codigo es equivalente a:
Código (c++) [Seleccionar]
numeros = std::operator+(numeros, alfanumerico [a]);


Título: Re: Duda en una Línea de Codigo
Publicado por: dario01dr en 5 Diciembre 2021, 03:49 AM
Hola, porque no usas el C++ moderno. Te dejo un ejemplo.
Salu2.

Código (cpp) [Seleccionar]
for (auto caracter : cadena) {
    if (isdigit(caracter))
      numero = numero + caracter;
  }

  cout << numero;
Título: Re: Duda en una Línea de Codigo
Publicado por: snoopty en 5 Diciembre 2021, 11:01 AM
Cita de: Eternal Idol en  4 Diciembre 2021, 09:42 AM
Estas trabajando con objetos y al sumar una cadena y un caracter se llama a un operador + sobrecargado que se encarga de hacer el trabajo necesario para agregar un caracter en una cadena.

https://en.cppreference.com/w/cpp/string/basic_string/operator%2B

Tu codigo es equivalente a:
Código (c++) [Seleccionar]
numeros = std::operator+(numeros, alfanumerico [a]);





Gracias !!!!
( Y lo de la Librería cctype ? )
Título: Re: Duda en una Línea de Codigo
Publicado por: Eternal Idol en 5 Diciembre 2021, 11:37 AM
Cita de: snoopty en  5 Diciembre 2021, 11:01 AM

Gracias !!!!
( Y lo de la Librería cctype ? )

iostream incluye otras cabeceras que terminan incluyendo directamente a cctype o a alguna otra que declara isdigit. Podes verlo si compilas con -H en g++ (/showIncludes en VC++).
Título: Re: Duda en una Línea de Codigo
Publicado por: snoopty en 5 Diciembre 2021, 12:59 PM
Gracias. Deduzco entonces que IOSTREAM incluye a LOCATIONS, pues me sucedió lo mismo que con CCTYPE en lo referente a ALGORITHM
Título: Re: Duda en una Línea de Codigo
Publicado por: K-YreX en 5 Diciembre 2021, 18:34 PM
Cita de: snoopty en  5 Diciembre 2021, 12:59 PM
Gracias. Deduzco entonces que IOSTREAM incluye a LOCATIONS, pues me sucedió lo mismo que con CCTYPE en lo referente a ALGORITHM
No se debe suponer que una cabecera incluirá otras pues esto depende de cada implementación, de cada compilador.
Lo que a ti te funciona sin declarar una cabecera, a otra persona le puede fallar. Lo mejor es que si sabes que necesitas usar una cabecera, la declares explícitamente.
Título: Re: Duda en una Línea de Codigo
Publicado por: snoopty en 6 Diciembre 2021, 08:39 AM
Buen consejo