10 Exemplos de uso de string_view em C++

E mais 2 exemplos de códigos prontos como implementação.


10 Exemplos de uso de string_view em C++


std::string_view é uma classe de nome basic_string_view que utiliza char e std::char_traits , ambos como template.

Ela está disponível somente a partir do C++17 e precisa incluir o cabeçalho string_view . Pode ser implementada também para letras acentudas(std::wstring_view), unicode 8(std::u8string_view), 16(std::u16string_view, C++20) e 32(std::u32string_view) .

Ela praticamente cria um vector de caracteres para uma string .

Cada caractere é um índice:

T e r m i n a l   R o o t
0 1 2 3 4 5 6 7 8 9 10 11 12

É muito utilizada em códigos que fazem parser.

Vamos ver 10 exemplos de utilizá-la!


01. Uso básico, declarando, inicializando e imprimindo uma string_view

std::string_view sv {"Terminal Root"};
std::cout << sv << '\n';

02. Imprimir somente o 4º(quarto caractere)

std::cout << sv[3] << '\n'; // m

03. Obter o tamanho da string_view

std::cout << sv.size() << '\n'; // 13

04. Imprimir o último caractere

std::cout << sv.back() << '\n'; // t

05. Saber a posição do caractere 'i'

std::cout << sv.find("i") << '\n'; // 4

06. Saber a posição de trás para frente

std::cout << sv.rfind("o") << '\n'; // 11

Seria o 1º ‘o’ de trás para frente, o find() daria 10 . Outra observação é se você informar um caractere que não existe, dará garbage(string::npos, um número esquisito).

07. Verificar se existe o caractere 'X'

std::cout << sv.find("X") << '\n'; // garbage

08. Imprimir do 9º ao 13º caractere

std::cout << sv.substr(9, 13) << '\n'; // Root

09. Remover os 4 últimos caracteres

sv.remove_suffix(4);
std::cout << sv << '\n'; // Terminal

10. Remover os 8 primeiros caracteres

sv.remove_prefix(8);
std::cout << sv << '\n'; // ' Root'

Bônus

É possível também usar string_view_literals adicionando o termo sv ao final, exemplo de código com literal:

#include <iostream>
#include <string_view>

using namespace std::string_view_literals;

int main(){
  auto literal = "Terminal Root"sv;
  std::cout << literal << '\n';
  return 0;
}


Exemplo de um código pronto:

#include <iostream>
#include <string_view>
 
int main() {
    constexpr std::string_view unicode[] {
        "▀▄─", "▄▀─", "▀─▄", "▄─▀"
    };
 
    for (int y{}, p{}; y != 6; ++y, p = ((p + 1) % 4)) {
        for (int x{}; x != 16; ++x)
            std::cout << unicode[p];
        std::cout << '\n';
    }
}

Saída:

▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─
▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─
▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄
▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀
▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─
▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─

Algumas outras funções só estão disponíveis no C++20 ou C++23, exemplos: contains(), starts_with() e outros.

Para mais informações acesse: https://en.cppreference.com/w/cpp/string/basic_string_view .


cpp cppdaily


Compartilhe


Nosso canal no Youtube

Inscreva-se


Marcos Oliveira

Marcos Oliveira

Desenvolvedor de software
https://github.com/terroo


Crie Aplicativos Gráficos para Linux e Windows com C++

Aprenda C++ Moderno e crie Games, Programas CLI, GUI e TUI de forma fácil.

Saiba Mais

Receba as novidades no seu e-mail!

Após cadastro e confirmação do e-mail, enviaremos semanalmente resumos e também sempre que houver novidades por aqui para que você mantenha-se atualizado!