[ Foro de C++ ]

Separar una cadena de caracteres en dos

20-Nov-2015 02:39
Invitado (Anonimo)
1 Respuestas

Me explico, como tarea tengo que crear un programa que haga lo siguiente:
el usuario introduce una cadena de caracteres formada de un numero y una unidad, y yo tengo que separar la parte numérica e imprimirla a parte por medio de una función.
Por ejemplo si el usuario pone "482.35 metros" el programa debe de imprimir "482.32".

Yo hice lo siguiente:


void dividir(char *A, char *B)
   {
       int largo=0,j=0,i;
       largo=strlen(A);
       for (i=0;i<largo;i++)
          {
           if (A[i]=='0'||A[i]=='1'||A[i]=='2'||A[i]=='3'||A[i]=='4'||A[i]=='5'||A[i]=='6'||A[i]=='7'||A[i]=='8'||A[i]=='9'||A[i]=='.')
             {
              B[j]=A[i];
              j++;
             }
          }
   }

int main()
   {
    char A[50],B[50];
    cout <<"escribe un num seguido de la unidad:\n";
    gets (A);
    dividir(A,B);
    puts (B);
    return 0;
  }


El programa si separa el numero, pero hay ocaciones en que después del numero imprime caracteres extraños. Ya intente limpiar el buffer y usar     strcpy(B,""); pero aun asi sigue pasando.
Si pudieran ayudarme o decirme que estoy haciendo mal se los agradecería.


20-Nov-2015 12:28
Nacho Cabanes (+83)

Te basta con añadir un carácter nulo al final, para marcar el final de cadena. Recuerda que, en las cadenas al estilo de C lo que marca el final de una cadena es que termine en \0:


void dividir(char *entrada, char *salida)
{
    int largo = strlen(A);
    int posSalida=0;
    for (posEntrada=0;posEntrada<largo;posEntrada++)
    {
        if (entrada[posEntrada]=='0'||entrada[posEntrada]=='1'
            ||entrada[posEntrada]=='2'||entrada[posEntrada]=='3'
            ||entrada[posEntrada]=='4'||entrada[posEntrada]=='5'
            ||entrada[posEntrada]=='6'||entrada[posEntrada]=='7'
            ||entrada[posEntrada]=='8'||entrada[posEntrada]=='9'
            ||entrada[posEntrada]=='.')
        {
            salida[posSalida] = entrada[posEntrada];
            posSalida++;
        }
    }
    salida[posSalida] = '\0';
}


He cambiado los nombres de las variables para que sean más legibles. También hay otros posibles planteamientos que quizá incluso sean más sencillos, como buscar el primer espacio.

Moveré tu consulta al foro de C, porque tu fuente es de C casi puro, no de C++, ya que no usas "string" sino char*, ni "cout" sino "puts", salvo una única vez en "main".






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)