Utiliser une string avec switch/case

potimarara Messages postés 2 Date d'inscription jeudi 7 décembre 2006 Statut Membre Dernière intervention 9 février 2007 - 9 févr. 2007 à 09:41
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 - 9 févr. 2007 à 14:02
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;
}
A voir également:

4 réponses

BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
9 févr. 2007 à 10:37
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
0
turnerom Messages postés 492 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 12 janvier 2012 1
9 févr. 2007 à 10:43
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
0
potimarara Messages postés 2 Date d'inscription jeudi 7 décembre 2006 Statut Membre Dernière intervention 9 février 2007
9 févr. 2007 à 11:20
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
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
9 févr. 2007 à 14:02
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
0
Rejoignez-nous