• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

256mxr

Switch com strings é possivel???

10 mensagens neste tópico

Tive a tentar usar um switch com strings mas da_m erro ao compilar

Com chars sei que funciona.

Por exemplo:

string op;
switch(op)
{
        case "sol": cout << "hoje\n";
        case "chuva": cout << "amanha\n";
}

Da este erro ao compilar "switch quantity not a integer"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não podes meter strings no case...

Mas inteiros e caracteres podes...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Entao n tenho outra hipotese a n ser usar if-else

O problema é k sao mt testes pa fazer com if else...

N ha outra maneira??

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Entao n tenho outra hipotese a n ser usar if-else

O problema é que sao mt testes pa fazer com if else...

N ha outra maneira??

Não conheço outra maneira. Também já tive projectos com muitas comparações de string e tive de usar o if-else sempre.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pode não ser uma solução tão refinada.

Mas se criares um vector de strings e antes de chamares um ciclo ( ex: for ) que localiza a string que queres no vector, só tens que fazer switch ao índice.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Desculpa Merlin3000 mas n percebi isso do indice??

for(vector <string>::iterator it=vx.begin();it!=vx.end();it++)

{

          //faz qualquer coisa

}

e agora o switch como faço iso do indice??

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens aqui um exemplo.. usei um while em vez do for mas é mais pelo hábito lol. Não usei a STL mas acho que dá para perceber a ideia.

#include <iostream>

using namespace std;

int main()
{
int i;
char nomes[3][50] = {"Joao","Manuel","Pedro"};
char var[50];

cin>>var;

i = 0;
while ( (strcmp(var,nomes[i]) != 0) && (i < 3))
{
    i++;
}

    switch (i)
    {
        case 0:
            cout<<"0";
        break;
        case 1:
            cout<<"1";
        break;
        case 2:
            cout<<"2";
        break;
        default:
            cout<<"Não existe o nome";
        break;
    }
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não tens  uma maneira directa de fazer um switch a uma string tal como:

switch(string)
{
  case "abc": 
            //codigo 
  case "def":
            //codigo
  default:
            //codigo
}

mas podes dar a volta à situação atribuindo a cada uma das strings que queres comparar um índice, um valor inteiro, e depois fazer um switch desse valor inteiro, tal como mostra o exemplo do merlin3000 ou o URL que o Sven indica. São soluções para contornar  o problema, mas o C/C++ não permite directamente um switch aos valores de uma string.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora