Obra: Programar em C++/Manipulando strings
Matéria: Português
Nível: superior
char strings strings os caracteres são entendidos como sendo números que geralmente têm oito bits esses números são traduzidos na tabela ascii de caracteres como existem inúmeras regiões no mundo com características linguísticas próprias tabela ascii estendida por um bloco de caracteres acima dos mais baixos que varia de acordo com as necessidades de cada língua parte superior da tabela ascii conhecida como parte estendida referenciada por páginas de códigos para cada propósito linguístico isso quer dizer que podemos ter os mesmos números significando caracteres diferentes para cada região do mundo no estilo da linguagem quando queremos representar um conjunto de caracteres colocamos todos eles em uma matriz sequenciada na memória endereço relativo dado por exemplo para declarar um espaço na memória que contenha caracteres fazemos char dados este estilo de strings usado pela linguagem pura para manipular este tipo de string preciso ter certo cuidado pois matriz sempre tem um tamanho definido caso façamos um acesso um endereço fora da matriz invadiremos outras áreas de memória que não temos como definir que são portanto poderemos fazer programa parar de funcionar em muitos sistemas pode também haver danos aos outros programas até mesmo ao próprio sistema operacional porém em sistemas operacionais mais sofisticados como gnu linux que possuem gerenciamento de memória com proteção de memória apenas programa que causou falha irá parar de funcionar para manipular este tipo de string biblioteca padrão da linguagem dispõe de diversas funções para mais detalhes consulte livro programar em no estilo como era de se esperar as strings são objetos eles podem ser criados facilmente através da biblioteca padrão referenciada pelo arquivo de cabeçalho as strings são objetos com recursos que permitem manipular os seus caracteres com as funcionalidades das funções da linguagem mais algumas características próprias possibilitadas pela orientação objetos cpp include using std cout using std cin using std endl include using std string using std getline int main string anyword cout funções de caracteres úteis as seguintes funções estão no cabeçalho da biblioteca toupper to upper retorna maiúscula de uma letra uma função de um argumento caractere no caso do argumento não ser uma letra função retorna mesmo caractere que argumento tolower to lower mesmo comportamento que toupper porém com resultado em minúscula include include using namespace std int main void char ch do cout funções que verificam caractere estas funções recebem apenas um argumento caractere retornam um valor booleano função descrição isalpha retorna verdadeiro se argumento uma letra do alfabeto falso em caso contrário isalnum retorna verdadeiro se argumento uma letra do alfabeto ou um dígito falso em caso contrário isdigit retorna verdadeiro se argumento um dígito falso em caso contrário islower retorna verdadeiro se argumento uma letra minúscula falso em caso contrário isprint retorna verdadeiro se argu
rdadeiro se argumento uma letra minúscula falso em caso contrário isprint retorna verdadeiro se argumento um caractere imprimível incluíndo espaços falso em caso contrário ispunct retorna verdadeiro se argumento um sinal de pontuação caracteres imprimíveis que não sejam letras dígitos ou espaço falso em caso contrário isupper retorna verdadeiro se argumento uma letra maiúscula falso em caso contrário isspace retorna verdadeiro se argumento um espaço tabulação ou nova linha falso em caso contrário strings em as cadeias de caracteres da linguagem podem formatar um novo tipo de dados porém criar tipos de dados mais sofisticados não possível nesta linguagem as strings em são objetos da classe string que isso traz de novo para tratamento de textos em programas primeira coisa notar quando criamos strings em maneira de criá las classe disponibiliza uma série de construtores string string const string st string const string st size_t position size_t npositions string const char ps size_t string const char ps string size_t char ch isto torna possível basicamente criar string de seis maneiras diferentes podemos definir um objeto string vazio para futuramente usarmos de acordo com necessidade podemos criar um objeto string com uma cópia de outro podemos criar um objeto string com uma cópia de uma porção de outra string podemos criar um objeto string com uma cópia de uma parte de uma char string podemos criar um objeto string com uma cópia de uma char string podemos criar um objeto string preenchida com uma quantidade definida de um determinado caractere quando manipulamos strings podemos fazê lo com operadores como por exemplo operator operator operator operator operator que representam as operações atribuir valor de uma string para outra acessar caracteres individualmente adicionar uma string no final de outra concatenar strings enviar uma string um output stream receber uma string do input stream apenas com estas poucas informações já possível operar strings com bastante flexibilidade de uma maneira muito intuitiva vejamos alguns exemplos string alice beto gostam de chocolate doce de leite pipoca cout estas operações resultam em alice beto gostam de chocolate alice beto gostam de doce de leite alice beto gostam de pipoca alice beto gostam de doce de leite exemplos de como manipular strings em erase função membro erase elimina parte de uma string os parâmetros passados para função são posição inicial número de caracteres ser excluído veja um exemplo de uso abaixo include using std cout using std endl using std cin include using std string using std getline int main string mytext cout comparando formas de operar strings em em temos diversas funções que são usadas para manipular strings para mais detalhes veja livro programar em aqui faremos uma comparação dos modos de operar strings em algumas da linguagem permitem uma operação mais intuitiva das strings algumas novas formas de tratá las vejamos como manipular estes dados tão comuns em qualquer programa fun
mas novas formas de tratá las vejamos como manipular estes dados tão comuns em qualquer programa funções uteis para uso de strings strlen str string len length aceita um argumento que pode ser um array uma cadeia de caracteres um ponteiro que aponta para um array de caracteres ou uma string literal retorna um número inteiro que representa número de caracteres não incluindo caractere null int len len strlen jeff extensão char stinkydog dante len strlen stinkydog extensão char name devvie len strlen name extensão no temos duas funções similares na classe string que são lenght size estas funções não tem argumentos pois reportam as informações sobre objeto quem pertencem ambas retornam um inteiro que representa tamanho das strings string jeff kent cout copiando strings se tentássemos copiar strings desta maneira char target jeff kent char src micaela target src que acontecia que era cópia do endereço de src para ponteiro não os caracteres que estão dentro da matriz no entanto existe função strcpy estilo ela aceita dois argumentos primeiro para onde vai ser copiada passado ponteiro desse array não pode ser uma string literal segundo frase ser copiada pode ser um array um ponteiro ou um string literal char target jeff kent char src micaela strcpy target src note que esta operação muito arriscada visto que quando criamos target quantidade de caracteres que foi reservada para string era de caracteres mais caractere nulo no final se fizermos uma cópia de uma string com mais de caracteres para este endereço representado por target ele fatalmente causará uma violação de endereço porém em podemos atribuir valor de uma variável para outra da classe string da forma string target jeff kent string src micaela target src agora reflitamos no que significa estas operações em primeiro lugar string não um tipo primitivo de dado uma classe portanto um tipo de dado mais inteligente uma das características dos objetos string que eles são ou seja quando atribuímos uma string um dado maior que seu espaço interno de armazenamento ela aumenta seu espaço interno para comportar novo dado outra característica que operação para string uma operação de atribuição de conteúdo de forma que string copia outra quando usamos este operador não apenas ponteiro que referência endereço da string unir strings strcat string concatenate une duas frases recebe argumentos frase primária ponteiro para esse array char target jeff char source kent strcat target source cout deve se observar que strcat potencialmente uma das rotinas mais perigosas do por um motivo bem simples string de destino deve ser pre dimensionada deve ter espaço suficiente para receber string de origem um pequeno programa como char target regras do char source mas pode dar resultados imprevisiveis strcat target source escreverá bytes em regiões da memória que não foram previamente alocadas para string em este problema resolvido pelo uso de objetos string ao estilo de podemos fazer string target regras do string source geralme
pelo uso de objetos string ao estilo de podemos fazer string target regras do string source geralmente não dão resultados imprevisiveis target source cout isto porque classe string prevê uso do operador de concatenação nele está embutido um código de verificação de espaço realocação do mesmo para string caso seja necessário comparar frases se fizessemos char str devvie kent char str devvie kent if str str cout que acontecia que estariamos comparar os endereços não os valores temos função strcmp string compare tem arguentos retornar se forem iguais char str devvie kent char str devvie kent if strcmp str str cout esta comparação pode ser resultar em negativo positivo isso tem ver com jogo de caracteres na tabela ascii aqui vai um resumo resultados de comparações entre strings primeira string str segunda string str strcmp str str razão jeff jeff negativo tem valor ascii maior que azzz zaaa positivo tem valor ascii maior que chess check positivo os primeiros três caracteres são os mesmos mas quarta letra da primeira string tem maior valor ascii que quarta letra da segunda string jeff jeffrey negativo os quatro primeiros caracteres são os mesmos mas quinto caractere da segunda string tem valor ascii maior que caractere nulo na quinta posição da primeira string em podemos comparar duas strings através da função membro da classe string compare existem os seguintes formatos assinaturas para função int compare const string str const int compare const char szc const int compare size_t pos size_t const string str const int compare size_t pos size_t const char szc const int compare size_t pos size_t const string str size_t pos size_t const int compare size_t pos size_t const char szc size_t const função permite os seguintes modos de operação respectivamente comparar uma string de entrada str com conteúdo do objeto qual ela pertence comparar uma string apontada por um ponteiro com conteúdo do objeto qual ela pertence comparar uma seção começando em pos do objeto qual contém caracteres com string de entrada str comparar uma string apontada por um ponteiro szc com uma seção começando em pos qual contém caracteres do conteúdo do objeto qual ela pertence comparar uma seção do objeto iniciada em pos com caracteres com uma seção de str iniciada em pos com caracteres comparar uma string apontada por um ponteiro szc de extensão com uma seção começando em pos qual contém caracteres do conteúdo do objeto qual ela pertence resultado similar ao da função strcmp em retornando uma referência de valor de acordo com código ascii se estiver comparando duas strings uma outra opção ainda mais natural utilizar os operadores de comparação using namespace std string str check string str chess if str str cout convertendo string número no ficheiro arquivo cabeçalho da biblioteca cstdlib std lib temos várias funções de conversão de números em tipo numérico atoi acrônimo para ascii to integer recebe um argumento string retorna inteiro que string representa não verifica se argumento p
integer recebe um argumento string retorna inteiro que string representa não verifica se argumento pode ser convertido int num atoi programa exemplo include include necessário para atoi include using namespace std int main void char input int num cout input for int neste exemplo temos vantagem de usuário inserir um dígito para array de caracteres em vez de um inteiro para evitar um run time error ou garbage data que aconteceria se entrada fosse não numérica depois array verificado para ver se representa um número se numero for negativo tem caractere em usamos objetos da classe stringstream biblioteca sstream para armazenar temporariamente os caracteres depois usamos operador para converter os caracteres em número bastando para isto criar variável no formato que desejamos receber número mais uma vez temos uso do poliformismo para resolução de um problema comum de programação operação do diferente para cada tipo de dado selecionada automaticamente pelo compilador de acordo com tipo de dado da variável destino string name stringstream sst int sst os passos acima armazenam valor na variável todo processo de conversão feito pelo operador