Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1979 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  fonction qui renvoie les 4 derniers caractères en vc++ ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

fonction qui renvoie les 4 derniers caractères en vc++ ?

n°1479416
alino
la vie c´est la chance .
Posté le 21-11-2006 à 16:28:31  profilanswer
 

Salut à tous
 
j´essaye d´ecrire une fonction qui copie les 4 derrnies charactères d´une string et me les renvois,
mais car ne fonctionne pas dut tout, voici mon code.
 
Quelqu´un saurait peut être ou je fais ma betise ???
 

Code :
  1. #include<iostream>
  2. #include<string>
  3. using namespace std;
  4. char * GetExtensionFile (char* FileName)
  5. {
  6. char* FileExt ='\0';
  7. int i_cnt_path;
  8. int i_cnt = 0;
  9. i_cnt_path = strlen(FileName)-4;
  10. while(FileName[i_cnt_path] != '\0'){
  11.  FileExt[i_cnt] = FileName[i_cnt_path];
  12.  i_cnt++;
  13.  i_cnt_path++;
  14. }
  15.  FileExt[i_cnt] = FileName[i_cnt_path];
  16.  return FileExt;
  17. }
  18. int main ()      
  19. {
  20.  
  21.  char * Ext;
  22.  char * path;
  23.      cout<<"entrer le chemin"<<endl;
  24.      cin>>path;
  25.   Ext = GetExtensionFile(path);
  26.   cout<<Ext<<endl;
  27.  return 0;
  28. }


 
Merci bien !!

mood
Publicité
Posté le 21-11-2006 à 16:28:31  profilanswer
 

n°1479421
_darkalt3_
Proctopathe
Posté le 21-11-2006 à 16:30:38  profilanswer
 

Tu enlèves tout ces char* qui n'ont rien à faire là, tu fais un objet pour ça, tu utilises CString et les méthodes Left ou Right de cette classe.


---------------
Töp of the plöp
n°1479432
_darkalt3_
Proctopathe
Posté le 21-11-2006 à 16:45:45  profilanswer
 

tu peux aussi utiliser std::string avec substr pour etre portable


---------------
Töp of the plöp
n°1479477
tbp
Posté le 21-11-2006 à 17:45:47  profilanswer
 

Scan arrière, pour trouver l'extension finale comme dans "la.notation.hongroise.doit.mourir"

Code :
  1. char *GetExtensionFile(char *FileName) {
  2. if (FileName)
  3.  for (int i=std::strlen(FileName)-1; i>=0; --i)
  4.   if (FileName[i] == '.')
  5.    return &FileName[i];
  6. return 0;
  7. }


 
Evidement strlen part dans les choux si l'argument n'est pas une chaine bien formée.
 
edit: Crotte. Marche pas avec '..'
Il est fortement conseillé de ne pas se lancer dans les manips de chaines, sauf à fins didactiques, avec la bibiothèque C standard. C'est vraiment casse gueule.


Message édité par tbp le 21-11-2006 à 17:55:43
n°1479511
karlkox
Posté le 21-11-2006 à 18:37:20  profilanswer
 

Code :
  1. char *ext = strrchr(filename, '.');
  2. if (ext != NULL)
  3.   ++ext;

n°1479590
tbp
Posté le 21-11-2006 à 20:55:52  profilanswer
 

Oui, mais non; std::strrchr(0, '.'), c'est verbotten.
 
L'auteur initial n'utilisait que strlen, si on pouvait éviter de lui montrer comment faire un coredump en moins de 3 lignes avec strtok et compagnie ça serait un plus, nan?
 

Code :
  1. char *ext = filename ? std::strrchr(filename, '.') + 1 : 0;


 
edit: Cette ligne est tout aussi foireuse, heh.

Message cité 1 fois
Message édité par tbp le 21-11-2006 à 21:09:36
n°1479593
-ThX-
Not here anymore
Posté le 21-11-2006 à 21:01:20  profilanswer
 

tbp a écrit :

Oui, mais non; std::strrchr(0, '.'), c'est verbotten.
 
L'auteur initial n'utilisait que strlen, si on pouvait éviter de lui montrer comment faire un coredump en moins de 3 lignes avec strtok et compagnie ça serait un plus, nan?
 

Code :
  1. char *ext = filename ? std::strrchr(filename, '.') + 1 : 0;



+1

n°1479699
Trap D
Posté le 22-11-2006 à 08:25:05  profilanswer
 

Ton erreur est ici

Code :
  1. char * GetExtensionFile (char* FileName)
  2. {
  3.     char* FileExt ='\0';    int i_cnt_path;
  4.     int i_cnt = 0;
  5.     i_cnt_path = strlen(FileName)-4;
  6.      while(FileName[i_cnt_path] != '\0'){
  7.             FileExt[i_cnt] = FileName[i_cnt_path];
  8.         i_cnt++;
  9.         i_cnt_path++;
  10.     }
  11.       FileExt[i_cnt] = FileName[i_cnt_path];
  12.      return FileExt;
  13. }

FileExt est un pointeur non initialisé. D'ailleurs ton compilo aurait du râler ici : char* FileExt ='\0';
FileExt[i_cnt] pointe dans le décor, ça peut fonctionner comme ça peut planter.
 

n°1479730
alino
la vie c´est la chance .
Posté le 22-11-2006 à 09:38:22  profilanswer
 

Merci bien, j´ai pu m´inspirer de vos multiples réponses pour faire ceci et ca marche nickel.
 

Code :
  1. std::string GetExtensionFile(std::string FileName)
  2. {
  3. int beginIndex  = FileName.length();
  4. int endIndex  = FileName.length();
  5.     return FileName.substr(beginIndex-4,endIndex);
  6. }


 
cool ou bien ?
je vous remercie

Message cité 1 fois
Message édité par alino le 22-11-2006 à 09:39:26
n°1479733
_darkalt3_
Proctopathe
Posté le 22-11-2006 à 09:47:17  profilanswer
 

alino a écrit :

Merci bien, j´ai pu m´inspirer de vos multiples réponses pour faire ceci et ca marche nickel.
 

Code :
  1. std::string GetExtensionFile(std::string FileName)
  2. {
  3. int beginIndex  = FileName.length();
  4. int endIndex  = FileName.length();
  5.     return FileName.substr(beginIndex-4,endIndex);
  6. }


 
cool ou bien ?
je vous remercie


 
Oui, c'est déjà beaucoup mieux


---------------
Töp of the plöp
mood
Publicité
Posté le 22-11-2006 à 09:47:17  profilanswer
 

n°1479737
tbp
Posté le 22-11-2006 à 09:54:55  profilanswer
 

Que se passe-t-il quand FileName.length() < 4?
 
Tout ce qui rentre dans un programme est contaminé.

n°1479755
alino
la vie c´est la chance .
Posté le 22-11-2006 à 10:21:30  profilanswer
 

ben naya, je suis déja sur et certains que c´est superieux car je recois le chemin ou se trouve les données et au minimun c:\share\filename.txt
 
et moi c extension si m´interesse pour faire
 

Code :
  1. if (jpeg)
  2. {
  3. showimage //.jpg
  4. }
  5. else if
  6. {
  7. showHTML //.htm
  8. }
  9. else
  10. {
  11. playvideo //.mpv
  12. }


c tout.

n°1479759
tbp
Posté le 22-11-2006 à 10:25:32  profilanswer
 

Du moment que vous vous êtes posé la question, c'est RAS dans le talveg.

n°1479823
IrmatDen
Posté le 22-11-2006 à 11:56:18  profilanswer
 

Et si t'as un fichier dont l'extension fait plus de 3 lettres? (html par exemple, ou quelques autres variantes du type jpeg)

n°1479877
alino
la vie c´est la chance .
Posté le 22-11-2006 à 13:20:43  profilanswer
 

correct là ca devient chaud ??

n°1479884
bb138
La vie est belle ...
Posté le 22-11-2006 à 13:28:31  profilanswer
 

heu....
Si tu te bases sur l'extension, il me semble qu'il suffit de prendre tout ce qu'il y a après le dernier point (.) dans le nom complet d'acces au fichier, non ?
 
(utiliser rfind et substr je pense)

n°1479888
0x90
Posté le 22-11-2006 à 13:41:02  profilanswer
 

Encore plus drôle que les extentions de plus de 4 caractères, les blablah.tar.bz2 , qui ont un mimetype spécifique et différent des blablah.bz2 ;)


Message édité par 0x90 le 22-11-2006 à 14:00:12
n°1479944
tbp
Posté le 22-11-2006 à 14:41:08  profilanswer
 

alino a écrit :

correct là ca devient chaud ??


En même temps le problème a été évoqué 10 posts plus haut. Faudrait voir à percuter.

n°1480081
alino
la vie c´est la chance .
Posté le 22-11-2006 à 17:18:29  profilanswer
 

blablah.tar.bz2 ca c est pour moi un cas extrême !! il n´arrivera pas de toutes les facons car c est trop spécifique mais celui ci pourra bien arriver  
.html ou . js ou .mpeg


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  fonction qui renvoie les 4 derniers caractères en vc++ ?

 

Sujets relatifs
Problème avec la Fonction GET['etat']const devant une fonction
[resolu]problème avec une fonctionJS : passage de fonction à une fonction
Aide pour module TV stream, ajouté une fonction SQL en plus.afficher des caracteres accentués dans une fenetre MS-DOS
Appeler fonction avec NuSoap[Mprojector] J'ai un problème avec la fonction MFile
[Résolu] Changer le "body background" en fonction de la résolution 
Plus de sujets relatifs à : fonction qui renvoie les 4 derniers caractères en vc++ ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR