C ++

Como usar C ++ String Literal

Como usar C ++ String Literal
O teclado do computador tem caracteres impressos nele. Quando você pressiona uma tecla, vê o personagem 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,

char ident1 = 'A'; char ident2 = 'b'; char ident3 = '4'; char ident4 = '6';

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

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

char ident1 = '"';

é 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 seqüência de um caractere cada.

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

char ident = 'x';
ident = 'Y';

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 char ident = 'd';

A variável, ident é considerada somente leitura.

String Literal

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

char ident1 [] = "Eu te amo"; char ident2 [] = "Eu odeio três de vocês"; char ident3 []
= "nós somos o mundo"; char ident4 [] = "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 seqüência 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,

char ident = '\' ';

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

char ident [] = "ab" 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á certo. 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:

\ '"\? \\ \ a \ 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.

Operações com Personagens

Concatenação

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

char ident [] = "abc" "def";
cout << ident << "\n";

A saída é: abcdef . Esta 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:

char ident [] = "abc" "def"
"ghi";
cout << ident << "\n";

A saída é, abcdefghi.

Observação: 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';
cout << result << "\n";

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

resultado bool = 'B' == 'b';
cout << result << "\n";

A saída é 0 para falso. Considerar,

resultado bool = 'b' == 'c';
cout << result << "\n";

A saída é 0 para falso. Considerar,

resultado bool = 'B' != 'B';
cout << result << "\n";

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

resultado bool = 'B' != 'b';
cout << result << "\n";

A saída é 1 para verdadeiro. Considerar,

resultado bool = 'b' != 'c';
cout << result << "\n";

A saída é 1 para verdadeiro.

Então, == 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 < will return true (1) when the left character is less than the right character. The other relational operators, <=, >, > = 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 particular. Da mesma forma, a string é um ponteiro constante para o início de uma sequência de caracteres. Compare as seguintes definições:

int arr [] = 3, 4, 5, 6, 7;
char str [] = 'w', 'o', 'm', 'a', 'n';
char stri [] = "mulher";

A primeira matriz é uma matriz de ints e tem cinco elementos. O segundo e o terceiro arrays são arrays de chars com nomes diferentes, mas 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 a localização com o caractere, w mesmo se o valor de w for alterado. O tamanho do literal de string (matriz), cinco elementos, não permanece realmente constante. No entanto, cada um dos valores do literal pode ser modificado.

O que é constante em uma matriz 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:

int arr [] = 3, 4, 5, 6, 7;
char str [] = 'w', 'o', 'm', 'a', 'n';
char stri [] = "mulher";
arr [3] = 9;
str [3] = 'e';
stri [3] = 'e';
cout << arr[3] << '\n';
cout << str << '\n';
cout << stri << '\n';

O resultado é:

9
mulheres mulheres
mulheres

Observe que os elementos de um literal de string definido, como para a terceira definição acima, podem ser acessados ​​com o índice do array (subscrito). A razão para a segunda linha da saída é fornecida 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 número inteiro não deve ser menor que o número de elementos na matriz.

Para o literal de string, o número 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 subscritos mínimos.

int arr [5] = 3, 4, 5, 6, 7;
char str [5] = 'w', 'o', 'm', 'a', 'n';
char stri [6] = "mulher";

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

int arr [5] = 3, 4, 5, 6, 7;
char str [6] = 'w', 'o', 'm', 'a', 'n', '\ 0';
char stri [6] = "mulher";

A saída agora deve ser,

9
mulheres
mulheres

sem a segunda “mulher”. Observe que o subscrito correspondente para a segunda matriz é 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 char ident [] = "Eu te amo";

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";
cout << result << '\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";
cout << result << '\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:

char str [] = R "(abc \\ d efg hij
klmn \ n "'opq
primeiro) ";
cout << str << '\n';

O resultado é:

abc \\ d efg hij
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 amplo 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. Identificadores de caracteres podem ser usados ​​em comparações, mas 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

AppyMouse na tela Trackpad e ponteiro do mouse para tablets Windows
Os usuários de tablets costumam perder o ponteiro do mouse, especialmente quando costumam usar laptops. Os smartphones e tablets touchscreen vêm com m...
O botão do meio do mouse não funciona no Windows 10
O botão do meio do mouse ajuda você a percorrer longas páginas da web e telas com muitos dados. Se isso parar, você vai acabar usando o teclado para r...
Como alterar os botões esquerdo e direito do mouse no PC com Windows 10
É normal que todos os dispositivos de mouse de computador sejam ergonomicamente projetados para usuários destros. Mas existem dispositivos de mouse di...