No Java, as Strings, bytes, tem o metodo split(delimitador) que retorna um array do tipo criado com base num delimitador, queria sabe como faço o mesmo em C++
Preciso delimitar linhas "\n" e espaços para filtrar headers HTTP em busca de parametros.
Exemplo da Header
GET http://127.0.0.1 HTTP/1.1\nHost: 127.0.0.1\nX-Action: executar\n\n
Aqui por exemplo, como faço para filtrar o "X-Action" e retirar "executar" como valor?
É algo simples no Java, mas não sei como fazer no C++
Escrevendo, agora, da casa dos meus pais, onde tenho hospedados alguns alfarrábios.
Eu trabalho muito com Perl. Por causa disso, eu desenvolvi há algum tempo umas versões de split() semelhantes à função nativa dessa linguagem.
Em Perl, e também nas versões que mostro abaixo, a função split() pode fazer as separações considerando como separadores uma string exata, mesmo com múltiplos caracteres, ou uma expressão regular. Além disso, é possível dizer qual a quantidade máxima de partes depois da separação. As versões abaixo assim o fazem.
Uma diferença (entre outras possíveis que eu não vi por falha minha), porém, entre a versão do Perl e a minha, é que aquela usa número de partes negativo como sinônimo de um valor arbitrariamente positivo, e a minha, por usar size_t, não suporta valores negativos de modo nenhum. Em vez disso, alguém poderia usar std::numeric_limits<size_t>::max().
3. Re: Como fazer Split String com C++? [RESOLVIDO]
uilianriesusa Linux Mint
Post recolhido
Enviado em 06/05/2018 - 01:10h
Embora C++ não possua uma função de split, existem vários idiomas que cumprem essa tarefa.
std::vector<std::string> split(const std::string& text, const char delimiter = ' ') {
std::vector<std::string> tokens;
size_t current;
size_t next = -1;
do {
current = next + 1;
next = text.find_first_of(delimiter, current);
tokens.push_back(text.substr(current, (next - current)));
} while (next != std::string::npos);
return tokens;
}
int main() {
std::string s = "viva o linux";
const std::vector<std::string> tokens = split(s);
for (const std::string& token : tokens) {
std::cout << token << std::endl;
}
return 0;
}
4. Re: Como fazer Split String com C++?
paulo1205usa Ubuntu
Post recolhido
Enviado em 06/05/2018 - 07:09h
Como você usou apenas um caráter como terminador, poderia ter usado std:: string::find() em lugar de std::string::find_first_of(), ou então usar um conjunto de caracteres terminadores alternativos, colocando o segundo parâmetro em “const char *” ou “const std::string &”.
Sua função também trata a ocorrência repetida de separadores como vários campos vazios. Normalmente eu gosto disso, mas há casos em que é melhor tratar separadores adjacentes como um separador só. Talvez a função pudesse ter um parâmetro a mais para dizer se separadores adjacentes seriam entendidos como um separador só ou como múltiplos.
5. Re: Como fazer Split String com C++? [RESOLVIDO]