Ver Mensaje Individual
  #22 (permalink)  
Antiguo 18/06/2014, 13:19
Avatar de leosansan
leosansan
 
Fecha de Ingreso: mayo-2012
Ubicación: GRAN CANARIA
Mensajes: 194
Antigüedad: 12 años
Puntos: 49
Respuesta: Atascado con ejercicio.

¡¡¡La de Dios!!!, amigo Italico76, la has liado parda.


Propongo esta solución , de las muchas posibles:

Código C++:
Ver original
  1. #include <iostream>
  2. #include <cctype>  /// para usar la funcion "isdigit"
  3. #include <cstring> /// para usar la funcion "strcmp"
  4. #include <cstdlib> /// para usar la funcion "itoa"
  5. #include <cstdio>  /// para usar la funcion "sprintf"
  6. #define N 10
  7.  
  8. using namespace std;
  9.  
  10. bool incrementar( char numero[N] );
  11.  
  12. int main(){
  13.     char lista[N] = {0};
  14.   for( int i = 0; i < N - 1; i++ ){
  15.     cout << "Ingrese parametro " << i + 1 << " de string: ";
  16.     cin >> lista[i];
  17.   }
  18.     cout  << endl << "Cadena inicial: " << lista << endl;
  19.     if ( !incrementar( lista) )
  20.     cout << "Lo siento la cadena no puede ser tratada." << endl;
  21.     else
  22.     cout << "Cadena incrementada: " << lista << endl;
  23.     return 0;
  24. }
  25.  
  26. bool incrementar(char numero[N]){
  27.   char nueves [N] = {0};
  28.   for( int i=0; i < N - 1; i++ )
  29.     nueves [i] = '9';
  30.   for( int i=0; i < N - 1; i++ )
  31.     if ( !isdigit(numero[i]) )
  32.       return false;
  33.     if ( strcmp ( numero, nueves ) == 0 )
  34.       sprintf( numero, "%d", 0 );
  35.     else
  36.       sprintf( numero, "%d", atoi ( numero ) + 1 );
  37.     return true;
  38. }

Observar que me he curado en salud usando en un #define el tamaño de la cadena de nueves. Sí, sé que este caso es "999999999", pero ¿ y si el guasón del que marcó el ejercicio varía el número de 9?. Pues yo lo tengo fácil, basta cambiar el valor de N en el #define.

Y aquí la función "bool incrementar" con comentarios:

Código C++:
Ver original
  1. bool incrementar(char numero[N]){
  2.   char nueves [N] = {0};
  3.   for( int i=0; i < N - 1; i++ )
  4.     nueves [i] = '9';
  5.   for( int i=0; i < N - 1; i++ )
  6. ///compruebo si los caracteres con todos tipo int
  7.     ///if ( numero[i] < '0' || numero[i] > '9' )...o bien lo que sigue
  8.     if ( !isdigit(numero[i]) )
  9. ///si llega hasta aqui es true y comparo mediante la funcion "strcmp" con la cadena de nueves
  10.     if ( strcmp( numero, nueves ) == 0 )
  11. ///y si coincide copio "0" en la cadena con la funcion "sprintf"
  12.       sprintf( numero, "%d", 0 );
  13. ///si no, ahora viene el incremento del numero
  14. ///"atoi" es una funcion que obtiene un int de una cadena
  15. ///y "sprintf" como dije permite pasar a cadena un int.... y mucho mas!!!
  16.       else
  17.         sprintf( numero, "%d", atoi ( numero ) + 1 );
  18.     return true;
  19. }

¡¡¡Saluditos!!!


Última edición por leosansan; 18/06/2014 a las 13:30