none
Separar array de caracteres por un espacio. RRS feed

  • Pregunta

  • Buenas tardes a todos.

    Esta vez vengo con un problema con C++; tengo el siguiente array de caracteres, el cual fue leido de un archivo:

    v 1.000000 -1.000000 -1.000000

    el caso es que necesito capturar uno por uno los numeros flotantes (con todo y signo) y asignarlos a una variable cada una.

    El problema que tengo es que ya he intentado de todo para poder separar el array cada que se detecte un espacio, usando un ciclo que recorra todo el array y que despues pregunte por medio de un if si se detectó un espacio, y no separa absolutamente nada

    //Se concatena la linea del archivo encontrada (c, que es un array de char) con una string nueva (cadVert, tambien un array de char)
    strcpy(cadVert, c);
    
    for(i = 1; i < strlen(cadVert); i++)
    {
    	if(cadVert[i] != ' ') /*Aqui es donde tengo mi problema */
    	{
                    //Aqui pretendo almacenar cada numero (con todo y signo) 
                   //en un nuevo array de char (nC) que posteriormente convertire a float
    		nC[i-2] = cadVert[i]; 
    	}
    	else
    	{
    						
    		break;
    	}
    }

    Intente usando ' ', '\0 ' y con la funcion strtok.

    Inicio en la posicion 1 del array porque los dos primeros caracteres de este (v ) no serán contemplados.

    Muchas gracias por su ayuda


    miércoles, 23 de septiembre de 2015 0:07

Respuestas

  • Buenos días  ,

    lo mejor que puedes hacer es usar C++ en lugar de C, como al parecer lo tienes todo en un fichero plano,

    la idea sería cargarlo todo en un std::string

    Si tienes que eliminar las primeras posiciones, las eliminas con un erase

    string s_dato = "v 1.000000 -1.000000 -1.000000";

    dato.erase(0,2); // "1.000000 -1.000000 -1.000000"

    ahora la idea es pasar cada elemento a un array de strings, asi tienes cada valor en un elemento del array

    vector <string> miarray;

    spliter( s_dato, miarray );

    Por ultimo, iteras sobre los elemetos del array y los covierte  uno a uno a  doble o float

    Este es un ejemplo de función "spliter"



    void spliter ( std::string& data, vector<std::string>& output )
    {
        std::string s = data;
        std::string delimiter = " "; // blank space

        size_t pos = 0;
        std::string token;
        while ((pos = s.find(delimiter)) != std::string::npos)
        {
            token = s.substr(0, pos);
            output.push_back(token);
            s.erase(0, pos + delimiter.length());
        }
        
        output.push_back(s);
        
    }

    Espero haber ayudado,

    Un saludo,

    Roni


    Roni Gonzalez Kalil rgk-soft Simple, efectivo e industrial

    • Propuesto como respuesta Sergio Parra martes, 12 de enero de 2016 15:31
    • Marcado como respuesta WalfasProject8000 miércoles, 24 de mayo de 2017 4:58
    viernes, 13 de noviembre de 2015 14:11