Ir ao conteúdo

C++ - String com espaços


Wake

Posts recomendados

Postado

Bom Dia! Preciso de uma ajudinha

 

Tenho um script em c++ que faz a leitura da ultima linha de um arquivo, a linha contem os dados abaixo:

21/06/2013 01:50:46	27,999	

Em seguida em eu divido essa linha em 3 variaveis, data, hora e valor, porém quando eu exibo elas na tela a data está aparece cortada "1/06/2013", eu acredito que seja devido ao excesso de espaços que tem no arquivo em que o script faz a leitura.

 

Alguém pode me ajudar como resolver isso?

Postado

Claro, segue

#include <iostream>#include <fstream>#include <limits>#include <string>#include <sstream>#include <stdlib.h>#include <algorithm>std::istream& ignoreline(std::ifstream& in, std::ifstream::pos_type& pos){    pos = in.tellg();    return in.ignore(std::numeric_limits<std::streamsize>::max(), '\n');}std::string getLastLine(std::ifstream& in){    std::ifstream::pos_type pos = in.tellg();    std::ifstream::pos_type lastPos;    while (in >> std::ws && ignoreline(in, lastPos))        pos = lastPos;    in.clear();    in.seekg(pos);    std::string line;    std::getline(in, line);    return line;}//converter para floatfloat to_float(const std::string& str){   std::istringstream is(str) ;   float result ;      is >> result ;   return result ;} int main(){    std::string date;    std::string time;    std::string t;          std::ifstream file("daniel.txt");        //le a ultima linha do arquivo e divide o conteudo em variaveis    if (file)    {        std::string line = getLastLine(file);         	std::istringstream iss(line);        getline(iss, date, ' ');        getline(iss, time, '\t');        getline(iss, t);     }    else {        std::cout << "Nao foi possivel ler o arquivo\n";        return 2; }        //converte valor para float        std::replace(t.begin(), t.end(), ',', '.'); //transforma virgula em ponto na variavel t		float temp = to_float(t) ;                 if (temp >= 27)        {        std::cout << "Ultimo valor alto ";        return 2;        }		if (temp <= 10)		{        std::cout << "Ultimo valor baixo";        return 2;		}		if (temp >10 && temp <27)		{		std::cout << "Valor lido";		return 0;			}		else		{		std::cout << "Ocorreu um problemas na leitura da linha";		return 2;					}}

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!