Utiliser une string avec switch/case

Signaler
Messages postés
2
Date d'inscription
jeudi 7 décembre 2006
Statut
Membre
Dernière intervention
9 février 2007
-
BunoCS
Messages postés
14850
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
2 avril 2020
-
Salut a tous,

J ai le code suivant qui a partir de un nom de ficher (avec extension) me renvoir
un content-type.

Le probleme est que lorsque j extrais l extension, j ai en retour une string et switch accepte seulement un integer.
J ai essaye de jouer avec un enum mais son succes.

Est ce que quelqu un a une idee de comment resoudre mon probleme?
Mon environment est Linux (si ca peut etre utile)

D autre solutions sont aussi la bienvenue

Merci

Cyril
----------------------
#include <stdio.h>
#include <string.h>

enum file_type {    txt  0,c 0, pl = 0, cc = 0, h = 0,
    gif = 1,
    png = 2,    jpg 3,jpeg 3, jpe = 3  
};
char *get_content_type(char *file) {
    int i;
    int size = strlen(file);
    char *type;
    for (i=size;i!=0;i--) {
        if (file[i] == '.' )  break;
    }
    char *ext = &file[i+1];
    switch(ext) {
    case 0:
        type = "text/plain";
        break;
    case 1:
        type = "image/gif";
        break;
    case 2:
        type = "image/x-png";
        break;
    case 3:
        type = "image/jpeg";
        break;
    default:
        type = "text/html";
        break;
    }
    return type;
}
   
int main() {
    char *str = "hello.html";
    char *type = get_content_type(str);
    printf("%s\n",type);
    return 0;
}

4 réponses

Messages postés
14850
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
2 avril 2020
91
Salut Cyril,
Malheureusement pour toi, il n'est pas possible de faire un switch sur une string. Te voilà obligé d'avoir des conditions if en cascade...

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
Messages postés
492
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2012
1
Quel est l'interet de ton enum si tu switch avec les valeurs numériques ???
De plus le switch d'un char* te donnera n'importe quoi.

Fait des strncmp plutot qu'un switch. C'est moin joli c'est sur, mais dans ton cas (cad pas en C++), je ne vois pas comment faire autrement

<hr size="2" width="100%" />TuRn3r
Messages postés
2
Date d'inscription
jeudi 7 décembre 2006
Statut
Membre
Dernière intervention
9 février 2007

Salut


J ai trouver ca sur le www:

http://atty.skr.jp/WebSVN/filedetails.php?repname=mplayer-w100&path=%2Ftrunk%2Flibmpdemux%2Fnetwork.c&sc=1


Je pense que la solution serait de faire comme la structure "mime_struct_t mime_type_table[]" du lien ci dessus.

Merci a tous

Cyril
Messages postés
14850
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
2 avril 2020
91
Tu peux faire une map qui a comme clé ton extension de fichier et comme valeur ton mime-type:

// Déclaration
map<string, string> MapOfMime;

// Initialisation
MapOfMime["gif"]="image/gif";
....

Recherche du mime-type avec la fonction find(). Plus d'info sur MSDN

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage