Ir ao conteúdo
  • Cadastre-se

Manipulação de String´s no C/C++


raf-sp

Posts recomendados

Pessoal,

Quando eu "rodo" o código abaixo, o compilador do C++ dá um erro:

error C2440: '=' : cannot convert from 'char [1]' to 'char'

This conversion requires a reinterpret_cast, a C-style cast or function-style cast

Porque a variável "xyz[1]" não atribui o valor "1"??? :muro:

#include "windows.h"

#include "stdio.h"

#include "iostream.h"

#include "string.h"

#include "stdlib.h"

char palav[8];

char xyz[6];

void main()

{

//(......)

cout << "\n\n\nDigite uma palavra : ";

cin.getline (palav, 8, '\n');

switch (palav[0])

{

case '"A"':

xyz[1] = "1"

case '"B"':

xyz[1] = "2";

case '"C"':

xyz[1] = "3";

case '"D"':

xyz[1] = "4";

case '"E"':

xyz[1] = "5";

case '"F"':

xyz[1] = "6";

case '"G"':

xyz[1] = "7";

case '"H"':

xyz[1] = "8";

case '"I"':

xyz[1] = "9";

case '"J"':

xyz[1] = "0";

}

cout << "Caracter1 " << xyz[1] << endl;

//(.....)

}

:help:

Link para o comentário
Compartilhar em outros sites

Quando você faz referencia a xyz[1] , está se referindo ao segundo caracter da variável xyz.

Quer dizer, enquanto xyz é um pointer a char (um array de char), xyz[1] é um simples char.

Por este motivo, para comparar, atribuir, etc, você somente pode usar um outro char.

"A" (com aspas) é uma string, enquanto 'A' (com apóstrofe) é um caracter.

Então o seu código deveria ser escrito assim:

switch (palav[0])

{

case 'A':

xyz[1] = '1';

case 'B':

xyz[1] = '2';

......

}

:bye:

Elga.

Link para o comentário
Compartilhar em outros sites

Bom, não sei se vou conseguir explicar toda a teoria sobre o assunto. Mas aqui vão dois exemplos.

1) Se você quer declarar um array de strings, que já vão ser inicializados (ex. uma lista de mensagens para mostrar na tela), fica assim:

char *Mensagem[] = {"Mensagem 1",
                "Mensagem 2",
                "Mensagem 3",
                "Mensagem 4",
                "Mensagem 5",
                "Mensagem 6",
                NULL,
               };

O NULL final não é imprescindível, mas é bom pois facilita as coisas se você precisar percorrer o array, e ajuda na hora de implementar mecanismos de segurança que impeçan ultrapassar a fronteira do array.

2) Já se você precisa declarar um array de strings cujo tamanho não é conhecido inicialmente, (ex., buscar e listar nomes de arquivos em um diretório), pode declarar assim:

char  **files;

No código, antes de usar o array terá que alocar memória para ele, e para atribuir valor a um elemento em particular, tem que alocar memória para esse elemento, exemplo:


#define MAXFILES 100; // Vamos supor que so vai ter até 100 files

char StringExemplo[] = "Exemplo";
.....

files = calloc(MAXFILES , sizeof(char *)); // Aloca memoria para o array de pointers a char

files[5] = malloc(strlen(StringExemplo) + 1); // aloca memória para o elemento de indice 5 do array

strcpy(files[5], StringExemplo); // Agora sim, pode fazer alguma coisa com ele !

Bom, não é muita coisa, mas espero que ajude.

:bye:

Elga.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...