begin process at 2008 05 16 05:57:13
1 173 216 membres
58 nouveaux aujourd'hui
13 970 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CORRECTEUR DE PONCTUATION


Information sur la source

Catégorie :Chaîne de caractères Classé sous : correcteur, pointeur, switch Niveau : Débutant Date de création : 03/05/2008 Date de mise à jour : 07/05/2008 23:49:38 Vu / téléchargé: 1 546 / 46

Note :
Aucune note

Commentaire sur cette source (18)
Ajouter un commentaire et/ou une note

Description

Mon petit programme corrige les fautes de ponctuation telleque un espace avent un poin, la virgule, poin virgule, deux poins etc...
ou le menque d'espace après la vigule, le point etc...

Source

  • #include <windows.h>
  • #include <fstream>
  • using namespace std;
  • bool bMaj=false;
  • const char*PtCcin;
  • string cCint;
  • void param(const char cCpar,int u);//déclaration de param (fonction pour les testes voir plus bas)
  • main(int argc,char**argv)
  • {
  • ofstream Fichier;
  • ifstream fStr;
  • /*déclaration des constantes*/
  • const char CcTestVir=',';
  • const char CcTestPoin='.';
  • const char CcTestDbPoin=':';
  • const char CcTestPoinVir=';';
  • const char CcTestExclam='!';
  • const char CcTestIntero='?';
  • const char CcTestParent=')';
  • fStr.open(argv[1], fstream::in);//ouverture du texte qui a ouvert le programme
  • if(fStr)
  • {
  • /*Création d'une copy de chemin d'accès pour ne pas toucher au texte originale*/
  • char*teste=argv[1];//récupération du chemin d'accès qui a ouvert le programme
  • int ilongChemin=strlen(teste);//récupération de la longueur du chemin
  • char suit[ilongChemin+10];//création d'un tableau pour stoquer le chemin
  • strncpy(suit,teste,ilongChemin-4);//copy du chemin sans le .txt
  • strcat(suit,"_corriger.txt");//rajout de "_corriger.txt" dans le chemin d'accès
  • /*************************************************************************/
  • Fichier.open(suit);//ouverture du texte en mode écriture
  • while(getline(fStr, cCint) ){//boucle sur le nombre de ligne
  • PtCcin=cCint.c_str();
  • int ii=strlen(PtCcin);
  • int u=0;
  • for(int i=0;i<=ii;i++){//boucle sur le nombre de lettre dans une ligne
  • if(*PtCcin==' ')
  • {
  • PtCcin++;
  • if(*PtCcin==CcTestVir)
  • {PtCcin--;cCint.erase(u,1);}else
  • if(*PtCcin==CcTestPoin)
  • {PtCcin--;cCint.erase(u,1);}else
  • if(*PtCcin==' ')
  • {PtCcin--;cCint.erase(u,1);}else
  • if(*PtCcin==CcTestParent)
  • {PtCcin--;cCint.erase(u,1);}else
  • {PtCcin--;}
  • }
  • /*un switch pour voir quel lettre/signe nous avons*/
  • switch(*PtCcin)
  • {
  • case ',':
  • PtCcin++;
  • if(*PtCcin!=' '){
  • u++;cCint.insert(u," ");
  • *PtCcin--;u--;
  • }
  • else{PtCcin--;}
  • break;
  • case '.':
  • bMaj=true;
  • PtCcin++;
  • if(*PtCcin==CcTestPoin)
  • {PtCcin--; break;}else
  • if(*PtCcin!=' '){
  • ii++; u++;cCint.insert(u," ");
  • *PtCcin--;u--;
  • }
  • else{PtCcin--;}
  • break;
  • case':':
  • PtCcin++;
  • if(*PtCcin==CcTestParent)
  • {
  • PtCcin--;
  • break;
  • }else{PtCcin--;
  • param(CcTestDbPoin,u);}
  • break;
  • case';':
  • param(CcTestPoinVir,u);
  • break;
  • case'!':
  • param(CcTestExclam,u);
  • bMaj=true;
  • break;
  • case'?':
  • param(CcTestIntero,u);
  • bMaj=true;
  • break;
  • default:
  • {
  • if(bMaj==true && islower(*PtCcin)) {
  • bMaj=false;
  • char temp[2];
  • temp[0] = (char)((*PtCcin)&0xDF);
  • temp[1]=0;
  • cCint.replace(u,1,&temp[0]);
  • }
  • break;
  • }
  • }
  • u++; PtCcin++;
  • }
  • Fichier << cCint<<"\n";//écriture du texte dans le fichier _corriger.txt
  • }
  • //on ferme
  • Fichier.close();
  • fStr.close();
  • MessageBox(NULL,"Correction terminé","Fin",MB_OK);//message de fin
  • }else
  • {
  • MessageBox(NULL,"FICHIER ERREUR","ERREUR",MB_ICONERROR);
  • MessageBox(NULL,
  • "Ce progamme a besoin d'un fichier texte (.txt) pour fonctionner\nOuvrez le avec un fichier !",
  • "Info",MB_OK|MB_ICONASTERISK);
  • return 0;
  • }
  • }
  • void param(const char cCpar,int u)
  • {
  • /*vérifiquation de l'espace avant notre signe*/
  • PtCcin--;
  • if(*PtCcin==' ')
  • {*PtCcin++;}else{
  • cCint.insert(u," ");
  • PtCcin++;
  • u++;
  • }
  • /*vérifiquation de l'espace après notre signe*/
  • PtCcin++;
  • if(*PtCcin==' ')
  • {
  • *PtCcin--;
  • }else{
  • u++;cCint.insert(u," ");
  • PtCcin--;
  • u--;
  • }
  • }
#include <windows.h>
#include <fstream>
using namespace std;
bool bMaj=false;
const char*PtCcin;
string cCint;
void param(const char cCpar,int u);//déclaration de param (fonction pour les testes voir plus bas)
main(int argc,char**argv)
{        
         
         ofstream Fichier;
         ifstream fStr;
         /*déclaration des constantes*/
         const char CcTestVir=',';   
         const char CcTestPoin='.';
         const char CcTestDbPoin=':';
         const char CcTestPoinVir=';';
         const char CcTestExclam='!';
         const char CcTestIntero='?';
         const char CcTestParent=')';
         
         fStr.open(argv[1], fstream::in);//ouverture du texte qui a ouvert le programme
         if(fStr)
         {
            /*Création d'une copy de chemin d'accès pour ne pas toucher au texte originale*/   
                 char*teste=argv[1];//récupération du chemin d'accès qui a ouvert le programme
                 int ilongChemin=strlen(teste);//récupération de la longueur du chemin
                 char suit[ilongChemin+10];//création d'un tableau pour stoquer le chemin
                 strncpy(suit,teste,ilongChemin-4);//copy du chemin sans le .txt
                 strcat(suit,"_corriger.txt");//rajout de "_corriger.txt" dans le chemin d'accès
            /*************************************************************************/
                       Fichier.open(suit);//ouverture du texte en mode écriture 
                
                        while(getline(fStr, cCint) ){//boucle sur le nombre de ligne
                                        PtCcin=cCint.c_str();
                                 int ii=strlen(PtCcin);
                                 int u=0;
                                 for(int i=0;i<=ii;i++){//boucle sur le nombre de lettre dans une ligne
                                  
                                         if(*PtCcin==' ') 
                                         {
                                                       PtCcin++;
                                                       if(*PtCcin==CcTestVir)
                                                       {PtCcin--;cCint.erase(u,1);}else
                                                       if(*PtCcin==CcTestPoin)
                                                       {PtCcin--;cCint.erase(u,1);}else
                                                       if(*PtCcin==' ')
                                                       {PtCcin--;cCint.erase(u,1);}else
                                                       if(*PtCcin==CcTestParent)
                                                       {PtCcin--;cCint.erase(u,1);}else
                                                       {PtCcin--;}
                                                       }      
                                                       
                                                       
                                                     
                         /*un switch pour voir quel lettre/signe nous avons*/
                                        switch(*PtCcin)
                                        {
                                                       case ',':
                                                             PtCcin++;
                                             if(*PtCcin!=' '){
                                                          u++;cCint.insert(u," ");
                                                          *PtCcin--;u--; 
                                                         }
                                                          else{PtCcin--;}
                                                          break;
                                                            
                                                       
                                                       case '.':
                                             bMaj=true;
                                             PtCcin++;
                                             if(*PtCcin==CcTestPoin)
                                             {PtCcin--; break;}else
                                             if(*PtCcin!=' '){
                                                          ii++; u++;cCint.insert(u," ");
                                                          *PtCcin--;u--; 
                                                         }
                                                          else{PtCcin--;}
                                                          break;   
                                                       case':':     
                                                            PtCcin++; 
                                                            if(*PtCcin==CcTestParent) 
                                                            { 
                                                            PtCcin--; 
                                                            break; 
                                                            }else{PtCcin--; 
                                                            param(CcTestDbPoin,u);}
                                                            break;
                                                       case';':     
                                                            param(CcTestPoinVir,u);
                                                            break;
                                                       case'!':    
                                                            param(CcTestExclam,u);
                                                            bMaj=true;
                                                            break;
                                                       case'?':     
                                                            param(CcTestIntero,u);
                                                            bMaj=true;
                                                            break;    
                                                  
                                                     default: 
                                                     { 
                                                     if(bMaj==true && islower(*PtCcin)) { 
                                                      bMaj=false; 
                                                      char temp[2]; 
                                                      temp[0] = (char)((*PtCcin)&0xDF); 
                                                      temp[1]=0;
                                                      cCint.replace(u,1,&temp[0]); 
                                                      } 
                                                      break; 
                                                        }  
                                                         }
                                                            
                                         
          u++;  PtCcin++;
              }
                Fichier << cCint<<"\n";//écriture du texte dans le fichier _corriger.txt 
                  }
                  //on ferme   
                 Fichier.close();
                 fStr.close(); 
 MessageBox(NULL,"Correction terminé","Fin",MB_OK);//message de fin
   }else 
    {
    MessageBox(NULL,"FICHIER ERREUR","ERREUR",MB_ICONERROR);
    MessageBox(NULL,
    "Ce progamme a besoin d'un fichier texte (.txt) pour fonctionner\nOuvrez le avec un fichier !",
    "Info",MB_OK|MB_ICONASTERISK);
     return 0;
     }	
}
void param(const char cCpar,int u)
{
 /*vérifiquation de l'espace avant notre signe*/       
         PtCcin--;
         if(*PtCcin==' ')
         {*PtCcin++;}else{
                              cCint.insert(u," ");
                              PtCcin++; 
                              u++;
                              }
 /*vérifiquation de l'espace après notre signe*/        
         PtCcin++;
         if(*PtCcin==' ')
         {
                       *PtCcin--;
                        }else{
                             u++;cCint.insert(u," ");
                             PtCcin--; 
                             u--;
                              }

}
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

03 mai 2008 09:00:03 :
lol dsl trompé de boutton
03 mai 2008 10:51:27 :
correction des fautes d'orthographe
03 mai 2008 10:52:49 :
...
03 mai 2008 11:14:40 :
omg les fautes la honte
03 mai 2008 11:27:21 :
omg les fautes la honte
03 mai 2008 11:28:51 :
omg les fautes la honte
03 mai 2008 11:30:25 :
omg les fautes la honte
03 mai 2008 11:34:16 :
c'est bon je crois
05 mai 2008 15:36:47 :
mis à jour des fautes d'orthographe si il y en a encors me le dire et mis à jour de la source elle peut désormais corriger des textes de taille indéfini et elle ne touche plus au fichier source donc plus de risque de perte de donner. voila j'espère que sa serra mieu comme ça ^^
05 mai 2008 15:37:52 :
...
05 mai 2008 15:41:09 :
...
07 mai 2008 23:47:44 :
cette fois c'est bon il est pour une ponctuation française le mode graphique est en route.
07 mai 2008 23:49:38 :
une ptite faute
  • signaler à un administrateur
    Commentaire de jfrancois le 03/05/2008 10:27:25

    Bonjour,

    1) Celà n'est pas de la PONCTUALITE mais de la PONCTUATION !!!
    2) Et s'il pouvait corriger les fautes d'orthographe !!!

  • signaler à un administrateur
    Commentaire de PCPT le 03/05/2008 10:45:17 administrateur CS

    salut,
    sûr qu'un code permettant de remonter le temps pour être à l'heure aurait été intéressant ^^

    titre corrigé

  • signaler à un administrateur
    Commentaire de snpier wolf le 03/05/2008 10:50:17

    merci et dsl j'avais pas fait gaffe je sais que mon orthographe est médiocre et se n'est que le nom ^^ mais à par sa mon code est il bien?

  • signaler à un administrateur
    Commentaire de PCPT le 03/05/2008 11:06:58 administrateur CS

    des messages en français, d'autres en anglais...., il faut vraiment faire "ATTANTION" :)

  • signaler à un administrateur
    Commentaire de snpier wolf le 03/05/2008 11:18:01

    ^_^' oups je suis grave bon je vais tous corriger et remettre en place

  • signaler à un administrateur
    Commentaire de SAKingdom le 03/05/2008 15:18:37

    salut ->sa<- va?Et tu ->est<- ->la<-?
    Oui...Je mange!
    ok,mais tu ->vien<- après (au cinéma)avec ->julie<-?
    oui.->ect<-...

    Les fautes d'orthographes qui sont la dedans sont-elles supposées être corrigées aussi ?
    Aussi, une phrase commence, normalement, par une majuscule.

  • signaler à un administrateur
    Commentaire de SAKingdom le 03/05/2008 16:38:57

    "qui sont la dedans"
    qui sont là dedans

  • signaler à un administrateur
    Commentaire de vecchio56 le 04/05/2008 17:43:57 administrateur CS

    "qui sont là dedans"
    qui sont là-dedans
    :)

  • signaler à un administrateur
    Commentaire de vecchio56 le 04/05/2008 17:44:29 administrateur CS

    La valeur 80000 apparait à 2 endroits, il faut définir une constante et l'utiliser à la place
    Tu alloues 80000 statiquement, du coup ton programme ne gère pas les fichiers de plus de 80000 octets, ce qui est dommage.
    Il faudrait que tu alloues une certaine taille et que tu lises ton fichier par bloc.

    Je ne comprends pas pourquoi Ccout fait 1000000 caractères?? Même remarque que pour la lecture, il faut écrire par bloc.

    Tes commentaires sont carrément inutiles, exemple:
    ifstream fStr;//déclaration de fStr

    Ton programme est illisible, l'indentation n'a aucune logique

    La description de ton programme est très vague, du coup on ne sait même pas ce qu'il est censé faire (par exemple moi je ne mets pas d'espace devant mes points et virgules)
    "les fautes de ponctualitoin telleque un espace avent un poin, la virgule"

    Enfin, merci de faire un minimum d'effort sur l'orthographe

  • signaler à un administrateur
    Commentaire de mallack le 05/05/2008 09:35:11

    presque 500 ko pour 138 lignes de code.Tu tiens une bonne moyenne!:-)
    T'inquiete j'ai les memes soucis!Mais pas jusqu'a ce point quand m...
    Sinon bonne idée de prog.A remanier je pense et une petite interface en plus pour contrôler de suite le résultat.
    Bonne continuation.

  • signaler à un administrateur
    Commentaire de snpier wolf le 05/05/2008 09:47:30

    comment je pourai faire pour lire par bloc?
    j'ai essayé ceci :
    for(int i=0;i<=iNombreBoucle;i++)
    {
    fStr.readsome(cCint, 500);
    for(int i=0;i<=iLongMaxTexte;i++)
                     {
                            
                            
                            
                             for(int y=0;y<=iNumChrs;y++){
                                    
                                     if(*PtCcin==' ')
                                     {
                                                   PtCcin++;
                                                   if(*PtCcin!=','&&*PtCcin!='.'&&*PtCcin!=':'
                                                   &&*PtCcin!=';'&&*PtCcin!='!'&&*PtCcin!='?'
                                                   &&*PtCcin!=')'&&*PtCcin!=' ')
                                                   { *PtCcin--;}
                                                   }      
                            
                             switch(*PtCcin)
                             {
                                            case',':                              
                                                          {param(CcTestVir);}
                                                          break;
                                            
                                            
                                            case'.':                                
                                                          {
                                                          PtCcin++;
                                                          if(*PtCcin==CcTestPoin){PtCcin--;
                                                          break;
                                                          }
                                                          else
                                                          {
                                                          PtCcin--;
                                                          param(CcTestPoin);
                                                          }
                                                          } break;
                
                                            case ':':                                
                                                          {param(CcTestDbPoin);}
                                                          break;
                                                                                  
                                            case';':                                
                                                          {param(CcTestPoinVir);}
                                                          break;
                
                                            case'!':                                
                                                          {param(CcTestExclam);}
                                                          break;
                  
                                            case'?':                                
                                                          {param(CcTestIntero);}
                                                          break;
                  
                                            case')':                                
                                                          {  
                                                          PtCcin++;
                                                          if(*PtCcin==' '||*PtCcin==CcTestPoin
                                                          ||*PtCcin==CcTestPoinVir||*PtCcin==CcTestDbPoin
                                                          ||*PtCcin==CcTestVir||*PtCcin==CcTestParent)
                                                          { *PtCcin--;}else
                                                          {*PtCcout=CcTestParent;
                                                          PtCcout++;
                                                          *PtCcout=' ';
                                                          PtCcout++;}
                                                          }
                                                          break;
                  }
                  *PtCcout=*PtCcin;  
                  PtCcout++;PtCcin++;
             }
            
                      //on écrie dedans    
                     Fichier << Ccout;
    }
    mais sa ne marche pas car il prend le promier bloc et le copy par le nombre de boucle
    comment fair pour lire un bou du texte, le modifier(ça c'est bon), le réécrire(ça aussi)
    et reprendre un bou du texte?

  • signaler à un administrateur
    Commentaire de jfrancois le 05/05/2008 10:08:03

    Bonjour,

    On peut lire et écrire dans un même fichier que s'il est à accès direct (un fichier contenant une liste de structures par exemple) mais pas dans un fichier texte dont on modifie la longueur au gré des modifications !

    - Ecrire dans un fichier temporaire (on lit "toto.txt" et on écrit "~toto.txt.tmp" par exemple, un nom assez tarabiscoté pour ne pas exister, à moins de tester son inexistence, dans le même répertoire)
    - A la fin du traitement :
      - Si tout c'est bien passé :
        - Effacer le fichier de départ argv[1] (ou le renommer en ".bak" pour conserver l'original !)
        - Renommer le fichier temporaire en argv[1].
      - Si ça c'est pas bien passé :
        - Effacer le fichier temporaire !

  • signaler à un administrateur
    Commentaire de snpier wolf le 05/05/2008 10:19:43

    ok mais mon problème est comment prendre le fichier toto.txt en plusieur foix?

  • signaler à un administrateur
    Commentaire de LeFauve42 le 05/05/2008 16:40:04

    Salut,

    C'est une bonne idee de programme, vu le nombre de personnes qui ignorent les regles de ponctuation, mais c'est plus complique que ce que ca en a l'air :o)

    C'est dommage que ton programme n'implemente que la ponctuation anglaise.
    En francais, pour les caracteres !?: et ;, il faut en effet mettre une espace AVANT et une APRES (et oui, en typographie, espace est au feminin :op ).

    Sinon pour la gestion des majuscules, tu pourrais remplacer tous tes case 'a' ... case 'z' par

    default:
    {
      if(bMaj==true && islower(*PtCcin)) {
        bMaj=false;
        cCint.replace(u,1,(*PtCcin)&0xDF);
      }
      break;
    }  

    islower() te renvoie vrai si le caractere passe en argument est une minuscule et faire &0xDF a une minuscule la transforme en majuscule (attention, ca ne marche que si le caractere est une minuscule (resultat hasardeux sinon)).

  • signaler à un administrateur
    Commentaire de snpier wolf le 05/05/2008 18:51:32

    ton idée est sympa mais elle me retourne une erreur d'invalidité de converstion ent un int et const char* je vais regardé ou ça bloc

  • signaler à un administrateur
    Commentaire de snpier wolf le 05/05/2008 19:23:21

    heu dans ce que tu nous dis il y a une faute on met pas d'espace avant une virgule ! ?

  • signaler à un administrateur
    Commentaire de LeFauve42 le 06/05/2008 10:54:40

    Heu, desole... la virgule, c'etait juste une virgule dans la phrase :o)
    Il ne faut bien sur pas d'espace avant la virgule !

    Les caracteres qui ont une espace avant et apres sont ! ? : ;

    Mais en tappant cette reponse, je viens de me rendre compte que ton programme peut poser des problemes avec les smiley:  ":)" ne doit pas etre change en ": )".
    Comme je disais, tu t'attaques a un probleme plus complique que ce qu'il en a l'air :o)

    Pour l'erreur, il faut que tu castes le resultat du & arithmetique en char (ou const char) et ca devrait passer (si la methode replace() de string est surchargee pour les chars:
    cCint.replace(u,1,(const char)((*PtCcin)&0xDF));

    Cela est du a la "promotion entiere" que pratiquent les compilateurss modernes (google t'expliquera les details si ca t'interesse, mais en gros tout ce qui est plus petit qu'un entier (y compris les chars) est caste en entier.


    Si ca ne marche pas (string::replace() ne prend que des const char* comme troisieme argument) le plus simple est de declarer un char et d'utiliser son adresse:

    char temp;
    temp = (char)((*PtCcin)&0xDF);
    cCint.replace(u,1,&temp);

    Voila,
    Bonne chance !

  • signaler à un administrateur
    Commentaire de snpier wolf le 06/05/2008 11:32:09

    top ça marche merci pour l'info, je vais regarder tous ça :)
    pour les smiley dans un texte normal personne ne les fais
    au pire des cas je rajoute dans case ':':
    PtCcin++;
    if(*PtCcin==CcTestParent)
    {
             PtCcin--;
             break;
    }

    et pour ce smiley xD rien besoin de fair ^^

Ajouter un commentaire

Appels d'offres

Pub



CalendriCode

Mai 2008
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS