você pode dizer iostreams quais caracteres para tratar como espaços em branco?

StackOverflow https://stackoverflow.com/questions/1655466

  •  11-09-2019
  •  | 
  •  

Pergunta

Assim que você poderia fazer algo assim, por exemplo:

std::string a("01:22:42.18");
std::stringstream ss(a);
int h, m, s, f;
ss >> h >> m >> s >> f;

que normalmente requer a string a ser formatado "01 22 42 18". você pode modificar o idioma corrente diretamente para fazer isso?

Foi útil?

Solução

Dê uma olhada scanf e fscanf . Você pode * ser capaz de fazer algo parecido com isto:

int h, m, s, f;
sscanf(a.c_str(), "%d:%d:%d.%d", &h, &m, &s, &f);  

* Aviso: Tem sido um tempo para mim e C ++

Outras dicas

Eu não acho que você pode mudar o delimitador padrão sem criar um novo local, mas que parece hackish. O que você pode usar fazer é usar getline com um terceiro parâmetro especificando o delimitador personagem ou você pode ler os delimitadores e não fazer nada com eles (por exemplo, ss >> h >> d >> m >> d >> s >> d >> f).

Você também pode escrever sua própria classe de análise que cordas alças divisão para você. Ou ainda melhor, use boost :: divisão Cordas Algoritmos Biblioteca Boost .

Você pode fazer isso através da criação de uma localidade com uma faceta ctype classificar : como espaços em branco.

Jerry Coffin explica como você pode especificar o espaço em branco personagens desta resposta a outra pergunta .

char c;
if (!(ss >> h >> c) || c != ':') return;
if (!(ss >> m >> c) || c != ':') return;
if (!(ss >> s >> c) || c != '.') return;
if (!(ss >> f) || ss >> c) return;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top