🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: fr.comp.lang.c
Article #84

Re: correspondance de guillemets

#84
From: Emmanuel Delahaye
Date: Sun, 26 Jan 2003 11:54
70 lines
3686 bytes
In 'fr.comp.lang.c', Benoit Izac <INVALID.use@reply.to> wrote:

> Bonjour,
> 
> La question porte sur le langage C pour les fonctions que je cherche
> mais aussi un peu sur l'algorithme, j'ai h�sit� � faire un X-post mais
> vu que peu de gens place un fu2 derri�re, je vous invite � me rediriger
> au bon endroit (fcd ?) si �a ne vous convient pas.
> 
> Voil�, je voudrais faire un petit programme (Exercice 1-24 du K&R) qui
> met en correspondance les guillemets.
> 
> A chaque fois que je rencontre `"', je place un drapeau � 1 qui
> m'indique que je suis dans des guillemets.
> 
> Le probl�me c'est que l'on peut avoir un caract�re d'�chappement `\'
> avant un second `"'.

C'est typiquement un probl�me d'algorithme. Personnellement, je traite ce 
genre de probl�me s�quenciel par une machine � �tat. Ca �vite les algorithmes 
scabreux et inmaintenables... Ca permet aussi de se concentrer sur la 
conception, le codage n'�tant plus qu'une formalit� (il existe des 
g�n�rateurs de code FSM)

[x-post fr.comp.developpement]
[fu-2 fr.comp.developpement]
 
> Je voulais avoir votre avis pour traiter ce probl�me :
>   1. on regarde si l'on a un `\'. Si c'est le cas, on ignore le
> caract�re suivant et on continue jusqu'� trouver un `"' :
> 
> /* while ((c = getchar()) != EOF) */
> while (flag = 1) {
>     if (c = '\' && !anti_slash) {
>             anti_slash = 1;
>     } else if (anti_slash) {
>             anti_slash = 0;
>     } else if (c = '"') {
>             flag = 0;
>     }
> }
> 
>   2. on continue jusqu'au prochain `"' et l'on regarde si le caract�re
> pr�c�dent �tait un `\' :
> 
> while (flag = 1) {
>     if (c = '"' && ??? ) {
>         flag = 0;
>     }
> }
> 
> 
> Je souhaite donc savoir:
>  - quelle est la meilleure m�thode et pourquoi ?

Peu importe la m�thode. Vu de l'utilisateur, seul le r�sultat compte.

>  - quelle(s) fonction(s) me permet(tent) de faire la solution 2 (juste
> le nom je ferais des recherches ensuite) ?
>  - si il existe une meilleure solution ou si j'ai oubli� quelque chose ?
>  - pour les parenth�ses, crochets et accolades, j'incr�mente une
> variable � chaque fois que j'en vois un(e) ouvrant(e) et d�cr�mente �
> chaque fois que je vois un(e) fermant(e) puis je fais mes comptes � la
> fin, est-ce que �a suffit ?

-- 
-ed- emdel at noos.fr ~]=[o
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/
C-library: http://www.dinkumware.com/manuals/reader.aspx
"Give peace a chance!"
Technical Details
Message-ID: <Xns930F83514C25hsnoservernet@130.133.1.4>
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!fu-berlin.de!uni-berlin.de!e118.dhcp212-198-96.noos.FR!not-for-mail
References: <87iswcf83c.fsf@thistle.izac.org>

Show Full Headers
Complete Article Headers
X-Google-Language: FRENCH,ASCII
X-Google-Thread: 102e15,2abd64a6cad5aab3,start
X-Google-Attributes: gid102e15,public
X-Google-Thread: f9822,40b938b3cf29f3ca
X-Google-Attributes: gidf9822,public
X-Google-ArrivalTime: 2003-01-26 03:54:34 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!fu-berlin.de!uni-berlin.de!e118.dhcp212-198-96.noos.FR!not-for-mail
From: Emmanuel Delahaye <emdelNOSPAM@noos.fr>
Newsgroups: fr.comp.lang.c,fr.comp.developpement
Subject: Re: correspondance de guillemets
Followup-To: fr.comp.developpement
Date: 26 Jan 2003 11:54:32 GMT
Organization: World Company
Lines: 70
Message-ID: <Xns930F83514C25hsnoservernet@130.133.1.4>
References: <87iswcf83c.fsf@thistle.izac.org>
NNTP-Posting-Host: e118.dhcp212-198-96.noos.fr (212.198.96.118)
X-Trace: fu-berlin.de 1043582072 31242784 212.198.96.118 (16 [98276])
User-Agent: Xnews/5.04.25
X-face: &^QSr'ztO>vp64+s[Gbcxojr0l\;9Xx9**b0B^{6:(mEW?9fU}\rU]rdLYEKSD9a0ok=\,iXcNFm{qN_}nFV8#m+pQyV-g3kLi0+?]0RS@`jDAE[QlWO}I2|eq6#M~%iuJO2xz