Como usar C ++ String Literal

How Use C String Literal



O teclado do computador possui caracteres impressos. Quando você pressiona uma tecla, vê o caractere na tela. Nota: o espaço também é um personagem. Um literal de string é uma sequência de caracteres. Este artigo explica como usar literais de string C ++. Você deve saber sobre arrays e ponteiros C ++ para entender este artigo.

Literal de personagem

Um literal de caractere é um caractere entre aspas simples. Então,







Caracteresident1= 'PARA'; Caracteresident2= 'b'; Caracteresident3= '4'; Caracteresident4= '6';

são todas definições diferentes de personagens. Observe que um dígito entre aspas simples é um caractere e não um número inteiro.



Uma seqüência de escape, como (veja abaixo) entre aspas simples, é um caractere. Então,



Caracteresident1= '' ';

é um personagem.





Um único símbolo entre aspas duplas não é um caractere; é uma seqüência de um caractere. Portanto, A ou c ou 2 não é um caractere, mas uma string de um caractere cada.

A variável de um char pode ser reatribuída, posteriormente no programa, da seguinte maneira:



Caracteresident= 'x';
ident= 'E';

Para impedir que um caractere atribuído a um identificador seja alterado, mais tarde no programa, preceda a definição com a palavra reservada, const, da seguinte maneira:

const Caracteresident= 'd';

A variável, ident é considerada somente leitura.

String Literal

Um literal de string é uma sequência de caracteres entre aspas duplas. Então,

Caracteresident1[] = 'Eu amo Você'; Caracteresident2[] = 'Eu odeio três de vocês'; Caracteresident3[]
= 'Nós somos o mundo'; Caracteresident4[] = 'Olá Mundo!';

são todas definições diferentes de literais de string. Observe o uso de aspas duplas. Não há nada como uma variável comum para uma string. Um literal de string é uma matriz de caracteres, onde em vez de delimitar com {}, a sequência é delimitada com. Os caracteres não são separados por vírgulas. Qualquer número maior que o número de caracteres no literal de string pode ser colocado entre colchetes. No entanto, é melhor deixar os colchetes vazios.

Um único caractere entre aspas duplas não é um caractere; é uma seqüência de um caractere. Portanto, A ou c ou 2 não é um caractere, mas uma string de um caractere cada.

Uma variável de string não permite a reatribuição do literal completo, mais tarde no programa - veja abaixo. No entanto, caracteres individuais podem ser reatribuídos - veja abaixo.

Aspas simples e duplas em caracteres ou literais

Para ter aspas simples como caractere, faça algo como,

Caracteresident= ' '';

Para ter aspas duplas como um caractere em uma string literal, faça algo como,

Caracteresident[] = 'longe'CD';

A barra invertida é usada em uma sequência de escape, para evitar conflito com delimitadores. Para ter aspas duplas como caractere, não há necessidade de barra invertida: '' está tudo bem. Para ter uma aspa simples em um literal de string, não há necessidade de barra invertida: ab’cd está certo.

Uma vez que a barra invertida é usada para escapar de um caractere, ela deve ser substituída por outra barra invertida quando usada como um caractere ou em um literal de string.

Sequência de fuga

Uma sequência de escape é uma das seguintes:

''? \ para b f n r> t v

Cada sequência de escape é normalmente digitada como um caractere entre aspas simples ou como uma sequência de escape entre aspas duplas.

  • ’: É usado como um caractere de aspas simples, entre aspas simples.
  • : é usado como um caractere de aspas duplas, dentro de um literal.
  • ? : Desde a ? é um caractere reservado, deve ser escapado em um literal.
  • \: a barra invertida deve ser escapada como um caractere ou em um literal de string, para não resultar em algum outro significado.
  • a: soa uma campainha de alarme uma vez, quando usado como um caractere ou dentro de um literal de string.
  • b: resulta como um retrocesso na exibição dentro de um literal de string, retirando o caractere anterior.
  • f: faz com que a próxima página seja alimentada na impressora quando usada como um caractere ou dentro de um literal.
  • r: retorna o cursor, onde o próximo caractere deve ser impresso, mas dentro da linha atual.
  • n: retorna o cursor para o início da próxima linha ou apenas para a próxima linha, dependendo do sistema operacional.
  • t: cria uma guia horizontal.
  • v: cria uma guia vertical.

Operações com Personagens

Concatenação

Na definição, dois literais de string podem ser unidos com espaço da seguinte maneira:

Caracteresident[] = 'abc' 'def';
custo<<ident<< ' n';

A saída é: abcdef. Essa definição pode ser estendida a mais de dois literais. Nota: a declaração é uma definição, não apenas uma atribuição. A definição pode até continuar para a próxima linha com espaço separando as linhas da seguinte forma:

Caracteresident[] = 'abc' 'def'
'tome nota';
custo<<ident<< ' n';

A saída é abcdefghi.

Nota: Os caracteres não podem ser concatenados dessa forma, pois as aspas simples do caractere não podem ter mais de um símbolo.

Operadores de igualdade

Os mesmos caracteres no mesmo caso são iguais. Eles não são iguais se não forem do mesmo caso. Considerar,

resultado bool= 'B' == 'B';
custo<<resultado<< ' n';

== significa igual, enquanto = significa atribuído a e não igual. A saída é 1 para verdadeiro. Considerar,

resultado bool= 'B' == 'b';
custo<<resultado<< ' n';

A saída é 0 para falso. Considerar,

resultado bool= 'b' == 'c';
custo<<resultado<< ' n';

A saída é 0 para falso. Considerar,

resultado bool= 'B' ! = 'B';
custo<<resultado<< ' n';

! = significa diferente, enquanto = significa atribuído a e diferente. A saída é 0 para falso. Considerar,

resultado bool= 'B' ! = 'b';
custo<<resultado<< ' n';

A saída é 1 para verdadeiro. Considerar,

resultado bool= 'b' ! = 'c';
custo<<resultado<< ' n';

A saída é 1 para verdadeiro.

Portanto, == e! = São operadores de igualdade.

Operadores relacionais

Para caracteres comuns em C ++, em ordem crescente, os números vêm antes das letras maiúsculas, que vêm antes das letras minúsculas.

Então= são explicados de forma semelhante.

O literal de string como um objeto

A matriz é um ponteiro constante para o início de uma sequência de tipo de dados específica. Da mesma forma, a string é um ponteiro constante para o início de uma sequência de caracteres. Compare as seguintes definições:

intarr[] = {3, 4, 5, 6, 7};
Caracteresp[] = {'no', 'ou', 'm', 'para', 'n'};
Caracteresstri[] = 'mulher';

O primeiro array é um array de ints e possui cinco elementos. O segundo e o terceiro arrays são arrays de chars com nomes diferentes, mas com o mesmo número de elementos. A segunda e a terceira matrizes são iguais, mas por seus nomes. O conteúdo de texto da segunda matriz é delimitado por colchetes; os caracteres são separados por vírgulas e cada caractere está entre aspas simples. O conteúdo de texto da terceira matriz é delimitado por aspas duplas; os caracteres não são separados por vírgulas e cada caractere não está entre aspas simples. A segunda e a terceira matrizes são duas maneiras de produzir uma string, sendo a terceira forma a melhor.

arr é um ponteiro constante para o primeiro elemento de sua matriz, o que significa que arr sempre apontará para a localização com o inteiro, 3, mesmo se o valor de 3 for alterado. O tamanho da matriz, cinco elementos, não permanece realmente constante. No entanto, cada um dos valores da matriz pode ser alterado.

str é um ponteiro constante para o primeiro elemento de sua matriz, o que significa que str sempre apontará para o local com o caractere 'w', mesmo se o valor de 'w' for alterado. O tamanho da matriz de caracteres, cinco elementos, não permanece realmente constante. No entanto, cada um dos valores do literal pode ser alterado.

stri é um ponteiro constante para o primeiro elemento de seu literal (array), o que significa que stri sempre apontará para o local que contém o caractere, w mesmo se o valor de w for alterado. O tamanho do literal de string (array), cinco elementos, não permanece realmente constante. No entanto, cada um dos valores do literal pode ser modificado.

O que é constante em um array ou literal de string? O endereço de memória do primeiro elemento da matriz ou literal permanece como o valor do nome (identificador) da matriz ou literal e não pode ser alterado. Bem, o tamanho da matriz ou literal não permanece realmente constante. Cada valor na matriz ou literal pode ser alterado. O código a seguir mostra como o quarto elemento de cada uma das matrizes foi alterado:

intarr[] = {3, 4, 5, 6, 7};
Caracteresp[] = {'no', 'ou', 'm', 'para', 'n'};
Caracteresstri[] = 'mulher';

arr[3] = 9;
p[3] = 'E';
stri[3] = 'E';

custo<<arr[3] << ' n';
custo<<p<< ' n';
custo<<stri<< ' n';

O resultado é:

9
mulheres mulheres
mulheres

Observe que os elementos de um literal de string definido, como na terceira definição acima, podem ser acessados ​​com o índice do array (subscrito). O motivo da segunda linha da saída é fornecido abaixo.

Subscrito de definição

Observe que nas definições acima, não há número inteiro para subscrito. Quando o número de elementos não pode ser facilmente determinado pelo programador, o inteiro para o subscrito deve ser omitido. Seja qual for o caso, o inteiro não deve ser menor que o número de elementos na matriz.

Para o literal de string, o inteiro deve ser pelo menos 1 maior que o número de caracteres na string. Isso ocorre porque o caractere nulo ( 0) é sempre adicionado pelo compilador, no final de uma matriz que é uma string, delimitada por aspas duplas. O caractere nulo não é adicionado ao final da segunda matriz acima, porque não é uma string oficial. O terceiro array é uma string oficial. O código a seguir mostra os valores mínimos de subscrito.

intarr[5] = {3, 4, 5, 6, 7};
Caracteresp[5] = {'no', 'ou', 'm', 'para', 'n'};
Caracteresstri[6] = 'mulher';

Para tornar a segunda definição uma string oficial, o caractere nulo deve ser adicionado da seguinte maneira:

intarr[5] = {3, 4, 5, 6, 7};
Caracteresp[6] = {'no', 'ou', 'm', 'para', 'n', ' 0'};
Caracteresstri[6] = 'mulher';

A saída agora deve ser,

9
mulheres
mulheres

sem a segunda mulher. Observe que o subscrito correspondente para o segundo array é 6, e não 5 como era.

Valores literais constantes

Para impedir que qualquer caractere nas aspas duplas atribuídas a um identificador seja modificado, mais tarde no programa, preceda a definição com a palavra reservada, const, da seguinte maneira:

const Caracteresident[] = 'Eu amo Você';

Operações com literais de string

Operações de igualdade

Os operadores de igualdade são == e! =. Quando variáveis ​​(identificadores) de duas strings são comparadas, são os ponteiros (endereços) dos literais que acabam sendo comparados; isso esta errado. Para comparar strings, os literais devem ser comparados, como no seguinte código:

resultado bool= 'mulher' == 'mulher';
custo<<resultado<< ' n';

A saída é 1 para verdadeiro. A comparação é feita na forma de dicionário, mas com os números vindo primeiro em ordem crescente, antes das letras maiúsculas, que vêm antes das letras minúsculas. A saída do código a seguir é 0, para falso.

resultado bool= 'mulher' ! = 'mulher';
custo<<resultado<< ' n';

Operadores relacionais com literais de string

Operadores relacionais não funcionam com literais de string.

Literal de string bruto

Um literal de string bruto permite que uma string seja exibida conforme digitada, ignorando as sequências de escape e respeitando as novas linhas. Considere o seguinte código:

Caracteresp[] =R'(abc\d efg ele
klmn n'
'opq
primeiro) ';
custo<< str << '
n';

O resultado é:

abc \ d efg ele
klmn n'' opq
primeiro

No código, o literal de string bruto começa com R, seguido por e (. Termina com) e.

Tipos literais de string principal C ++

Caracteres

O tipo char é o tipo C ++ original e normalmente armazenaria um caractere em 8 bits.

char16_t

Isso armazena um caractere em 16 bits.

char32_t

Isso armazena um caractere em 32 bits.

wchar_t

char16_t e char32_t são caracteres largos. wchar_t é um caractere largo que é proprietário e definido pela implementação.

Conclusão

Um literal de caractere é um único caractere entre aspas simples. Uma sequência de escape é um caractere que também pode estar entre aspas simples. Um literal de string é uma sequência de caracteres entre aspas duplas. Um literal de string é uma matriz de caracteres que termina com 0. Os operadores de igualdade e relacionais funcionam com literais de caracteres. Os operadores de igualdade funcionam com literais de string, mas os operadores relacionais não funcionam com literais de string. Os identificadores de caracteres podem ser usados ​​em comparações, mas os identificadores de string não devem ser usados ​​em comparações. Um literal de string bruto permite que uma string seja exibida conforme digitada, ignorando as sequências de escape e respeitando as novas linhas.

Chrys