Un truc tout bête et pourtant casse tête

Résolu/Fermé
jeun's - 23 oct. 2008 à 22:46
EL barto ! Messages postés 121 Date d'inscription samedi 25 octobre 2008 Statut Membre Dernière intervention 7 août 2009 - 27 oct. 2008 à 15:33
Bonjour,
alors là je sais que je suis au comble du ridicule MAIS ( !) j'ai pourtant besoin de vos conseil.

Je veux definir des constate de caractère, et les afficher.

je veux que char v avec v = 'bonjour"
et char u avec u = "au revoir"

et rechercher dans un texte les mots compris entre "bonjour" et au "revoir" voici ce que j'ai commencé à faire :

------------------------------------------------------------------------------------------------------
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
char v = 'bonjour';
char u = 'au revoir';
char i, p ; i correspond à l'ensemble du texte
p correspond au texte compris entre 'bonjour' et au 'revoir'

printf (" ecrivez un texte tel que :\n blablabla bonjour blablabla au revoir blablabla\n");
scanf ("%c", &i);


getchar();
return 0;

}
--------------------------------------------------------------------------------------------------------

alors est ce que j'aborde le problème de la bonne manière ?
est ce que je défini bien mes constantes ?

63 réponses

je suis pas sûr que ça marche ,

il ne trouve pas de sous chaine . comment ça se passe dans le programme exactement ?
0
pyschopathe Messages postés 1974 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
24 oct. 2008 à 23:46
Comment ça il ne trouve pas de sous-chaine ? Tu lui a rentré une chaine de la forme indiquée ?
0
je sais !

en fait la sous chaine est une chaine continue (sans espace entre les caractères) ,
en effet sur l'essaie que je viens de taper c'était de la forme :

kdjsfskdjhf bonjour ksjdhfs sdjfhs au revoir jsfhlqshf

ensuite j'ai essayé :

slkdjfsldkjf bonjour lsdkjflsdkjf au revoir lsdqkfjlsdkfj
et là ça a bien fonctionné.

Mais en fait , je veux surtout pas être de mauvaise fois, mais comme entre bonjour et au revoir, il risque d'y avoir plus d'un mot...

ecoute je veux pas être ennuyant, tu as passé beaucoup de temps là dessus, evidemment je ne sais pas comment je vais faire , mais si commence à te gonfler , je serai le premier à comprendre.
0
et puis je viens de regarder de prêt la sous chaine,
et en fait elle ne correspond pas au caractère qui se trouve entre bonjour et au revoir.
0
je l'essaye encore en fait je comprend pas trop quelle est la sous chaine.

Cette fois j'ai entré

sssssssss bonjour qqqqqqq qqqq au revoir llllllllllllllllll


et la sous chaine etait qqqqqqq qqqqq ydjsd
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
c'est ça !

il rajout toujours quelques caractère fantaissiste à la suite de la sous chaine. mais pas tout le temps.
0
pyschopathe Messages postés 1974 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
25 oct. 2008 à 00:06
Attends, je vais retester avec d'autes chaines, je reviens ensuite.
0
pyschopathe Messages postés 1974 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
25 oct. 2008 à 00:32
Bon, il y a un problème d'accès mémoire a priori vu les caractères ajoutés à la suite, mais je ne comprend aps pourquoi ça ne le fait que quand il y a plusieurs mots... Et je ne vois pas d'où il peut venir... Le malloc est bien utilisé ? (pas vraiment l'habitude du C moi !)
0
le malloc ?
0
pyschopathe Messages postés 1974 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
25 oct. 2008 à 00:36
A la fin, l'allocation dynamique de mémoire pour sous-chaine.
0
oui oui, j'avais vu, mais, j'ai jamais utilisé cette commande, je me renseigne là ou je peux.
0
pyschopathe Messages postés 1974 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
25 oct. 2008 à 00:41
http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man3/malloc.3.html
0
j'ai trouvé ça moi, mais comment l'appliquer au code :
--------------------------------------------------------
Deux fonctions permettent de réserver et de libérer dynamiquement une zone de la mémoire : malloc pour la réservation, dont la déclaration est la suivante :

void *malloc(size_t size);

Le seul paramètre à passer à malloc est le nombre d'octets à allouer. La valeur retournée est l'adresse du premier octet de la zone mémoire alloué. Si l'allocation n'a pu se réaliser (par manque de mémoire libre), la valeur de retour est la constante NULL.

La libération de la mémoire précédemment allouée via malloc est assurée par la fonction free dont la déclaration est la suivante :

void free(void *ptr);

Le seul paramètre à passer est l'adresse du premier octet de la zone alloué et aucune valeur n'est retournée une fois cette opération réalisée.

Voici du code réservant 20 octets et le libérant immédiatement après si l'allocation a été effectuée.

char * pointeur = malloc(20 * sizeof(char)); //Allocation de 20 octets
if(pointeur == NULL)
{
printf("L'allocation n'a pu être réalisée\n");
}
else
{
printf("L'allocation a été un succès\n");
free(pointeur); //Libération des 20 octets précédemment alloués
}
---------------------------------------------------------
0
pyschopathe Messages postés 1974 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
25 oct. 2008 à 00:50
Oui, ça me fait penser que j'avais oublié le free ! Paaaas bien... Bon j'ai trouvé une autre solution, sans allocation dynamique, mais qui semble marcher, dis-moi si tu trouve des problèmes :
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    const int TAILLE_CHAINE_MAX = 255;

    char * debut = "bonjour";
    char * fin = "au revoir";
    char chaine[TAILLE_CHAINE_MAX];
    chaine[0] = -1;
    chaine[TAILLE_CHAINE_MAX-1] = '\0';
    char sous_chaine[TAILLE_CHAINE_MAX];

    int i = 0;
    int indice = 0;
    int taille = strlen( debut );
    int ok = 0;

    printf( "Ce programme trouve une sous-chaine comprise entre les chaines %s et %s.\n\n", debut, fin );
    printf( "Ecrivez un texte de la forme : \n[...] %s [...] %s [...] (Maximum %i caracteres)\n", debut, fin, TAILLE_CHAINE_MAX );

    // Tant que le caractère saisi n'est pas un saut de ligne et qu'on n'a pas atteint
    // le nombre de caractères maximum, on lit et on enregistre dans le tableau.
    scanf("%c", &chaine[i]);
    while ( chaine[i] != '\n' && i<TAILLE_CHAINE_MAX-1 ) {
        ++i;
        scanf("%c", &chaine[i]);
    }

    if ( i < TAILLE_CHAINE_MAX-1 )
    { chaine[i] = '\0'; }

    i = 0;
    while ( i < strlen( chaine ) && ok == 0 ) {
        // Si on trouve debut dans la chaine saisie
        if ( strncmp( &chaine[i], debut, taille ) == 0 ) {
            i = i + taille;
            taille = strlen( fin );
            // On cherche maintenant la chaine fin
            while ( i < strlen( chaine ) ) {
                sous_chaine[indice] = chaine[i];
                // Si on trouve la chaine fin...
                if ( strncmp( &chaine[i], fin, taille ) == 0 ) {
                    // ...on enregistre l'indice
                    sous_chaine[indice] = '\0';
                    // ...on sort
                    ok = 1;
                    break;
                }
                ++i; ++indice;
            }
        }
        ++i;
    }

    if ( ok == 1 )
        printf( "La sous-chaine trouvee est : '%s'.\n", sous_chaine );
    else
        printf( "Aucune sous-chaine trouvee.\n" );

    return 0;
}
0
et tu sais quoi , je vraiment pas fort en programmation, et bien, le free, j'y avais presque songé !

quest ce que tu veux, quand quelque à l'ascendant sur nous même, on n'ose pas même croire qu'il peut lui aussi , non pas se tromper, mais simplement oublier .

:)
0
pyschopathe Messages postés 1974 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
25 oct. 2008 à 00:58
Toujours donner une idée, même si elle semble bête : si tu as raison, on avance et si tu as tort et bien tu apprends ! Cela dit le free ne cause pas de problème dans le programme, il provoque simplement des fuites mémoires (mémoire utilisée par le programme alors qu'elle ne sert plus à rien) qui sera libérée à la fin de l'exécution.

Tu as essayé la dernière version ?
0
BINGO !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


:)
0
pyschopathe Messages postés 1974 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
25 oct. 2008 à 00:59
Ça marche avec le free ou sans allocation dynamique ?
0
Oui je l'ai essayé, et je la réessaye, c'est un tel plaisir. C'est beau, y'a pas de mot pour le dire !

C'est parfait. Combien de temps et d'exercice avant d'avoir ton niveau ? et puis en plus je suis sûr que tu fais ça en même temps que d'autre pb à résoudre non ?
déjà que tu faisait ça en aveugle au départ ( sans compilo) .
0
pyschopathe Messages postés 1974 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
25 oct. 2008 à 01:05
Je suis en Master 2 d'informatique (5ème année donc), normal que j'arrive à quelque chose mais bon, ça aurait dû être plus rapide ! Cela dit je n'ai fait du C qu'en première année, ça remonte à loin...

Enfin, content d'avoir pu te filer un coup de main ! Par curiosité, c'est dans quel but cette fonction ?
0
sans marche sans l'allocation dynamique.
0
de toute manière pourquoi allouer de la mémoire ( evidemment pour que ça soit plus rapide, ais est ce vraiment vraiment utile ?)
0
pyschopathe Messages postés 1974 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
25 oct. 2008 à 01:10
La mémoire est toujours allouée (à chaque fois que tu déclares une variable). L'avantage de l'allouer dynamiquement dans notre cas est d'éviter d'utiliser 255 octets si le mot à trouver ne fait que 15 lettres par exemple... Mais bon, comme j'imagine que tu vas plutôt traiter des messages du genre "Bonjour <beaucoup de texte> Au revoir" que "<texte>Bonjour <texte> Au revoir <texte>", le gain en terme de mémoire est trop faible par rapport à la perte en temps... Donc finalement c'est peut-être mieux d'être en statique ! En plus on économise la fonction de copie et une variable, que du bon !
0
c'est bien ça, au moins TOI tu trouvera du boulot si tu n'en a déjà pas trouvé. Tu compte faire une thèse et faire prof ou bien chercher du boulot ?

Moi j'ai fini les études de Droit, et j'ai foiré le concours d'avocat. J'ai eut les résultat y'a 3 jours. et c'est quasiment impossible même avec un master de trouver du boulot.

j'ai toujours voulu apprendre à programmer mais tant que j'ai compté sur les profs du lycée j'ai jamais rien pigé. Là je me suis trouvé un bouquin qui explique bien les choses, et j'obtiet de petit résultats. Mais j'ai été ttrop gourmand avec cet exercice.
0
pyschopathe Messages postés 1974 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
25 oct. 2008 à 01:20
Tu n'as pas été trop gourmand, tu as appris ! C'est en rencontrant des problèmes qu'on progresse !
Si tu veux continuer ton apprentissage de C puis du C++, je te conseille ce site, les cours sont bien faits : http://www.siteduzero.com/tutoriel-3-14189-apprenez-a-programmer-en-c.htm

Tu peux repasser le concours d'avocat ? Tu t'y connais un peu en droit internet ? Genre mentions obligatoires pour un site de vente en ligne... Je suis en train d'en développer un pour mes vieux et je voudrais faire ça dans la légalité !

Et au niveau boulot, le problème c'est que le marché est plein d'informaticiens, dont des ingénieurs et que je sors de la fac (donc moins appétant pour les employeurs !).
0
bon, ben je te dis bonne soirée, parce que c'est qd même la fin de semaine et je suis crevé.

allé merci, je pense qu'on se croisera encore sur ce forum car :
je reste jeun's et toi aussi.

bonne nuit.
0
pyschopathe Messages postés 1974 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
25 oct. 2008 à 01:28
Et bien bonne nuit à toi aussi, et au plaisir de te recroiser dans le coin ! Tu devrais créer un compte, ce serait plus commode !
0
Le truc des mentions obligatoire, c'est que ça relève du droit commercial, fiscal et des sociétés, et de la propriété intellectuelle.

Ensuite y'a ce que peut contenir ( proposer le site par exemple, des contrats types ( c'est à dire des contrats d'adhésion parce que de masse et non négocié, mais préalablement défini par le commerçant lui même).

Ce qu'il faut savoir, c'est que dès qu'il y a du fric qui entre ou qui sort via le site, il faut déclaré un personne personne morale ( c'est à dire la société), et ensuite y'a des règlementations plu sou moins précises selon le type de commerce.

Mais si je devais syntétiser, je dirais que ces reglementation relève plus d'une logique d'information du client que l'on retrouve dans le droit général du droit commercial que d'un véritable législation léglistation spécifique et propre à internet.

Il n'y a pas de véritable droit du commerce en ligne. C'est un droit qui obéit au texte classique.
Je le sais parce que cette année j'ai essayé avec un ami de monter un société de coursier à vélo ( comme les bybcicle messenger de new york), et j'avais fait un site sur lequel on aurait pu payé les course voir les conditions, garanties, présentation et mentions légales, ( mon histoire c'est intérrompu de manière précoce parce que j'était à fond dans les révisions pour l'avocature).
Le seul truc qu'il ne faut jamais oublier c'est copyright. Ensuite tout ce que le site doit contenir de mentions légale, c'est ce qu'une société normal doit pouvoir présenter.

Pour cela j'imagine que tes parents ont déjà une société enregistré au Registre du commerce et de l'industrie non ? ( si c'est pas le cas, ça n'est d'ailleurs pas si grave, parce que l'usage d'internet n'apporte aucun changement à la forme du commerce).

Tout ce qui doit figuré c'est si par exemple c'est pour un commerce de produit comestibles il faudra indiquer que les normes sont respecter etc .)
0
pyschopathe Messages postés 1974 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
25 oct. 2008 à 01:44
Ok, merci. Ils ont déjà une société d'import de bijoux. Au niveau du copyright, quelle valeur peut avoir une mention copyright sur une page d'un site ?
0
EL barto ! Messages postés 121 Date d'inscription samedi 25 octobre 2008 Statut Membre Dernière intervention 7 août 2009 6
27 oct. 2008 à 14:39
En fait le copy right ne porte que sur le produit intellectuel que représente en lui même un site.
Ca s'est la base.

Mais certains site sont tellement attaché à la personne morale, qu'il est possible d'en faire des déclaration auprés de l'inpi en tant que brevet. ( bien sûr c'est possible de le faire pour tout le monde, et je crois que cette déclaration est gratuite, ou ne côute pas trés cher).

Pour des porduits de luxe, il n'y a pas de formalité particulières ( mais

par contre ça reste une activité commerciale, alors ils devront affiché les modalité de paiement, lle n° siret (l'immatriculation de la socitété), le kbis, l'adresse , lenom commercial de la société, le statu ( sarl, sa , eurl etc ...) les coordonnée pour pouvoir être joint.

Il peuvent encore préciser la juridiction qu'ils élisent en cas de litige ( en général c'est le trib qui s'occupe du patelin où tu habites, mais tu peut tout à fait choisir un autre, par exemple du habite marseille, masi tu préfère petre jugé par le trib de commerce de paris) (le client ne peut pas faire autrement que de faire enroler son affaire à paris). il faut aussi que tu donnes les condidtions générale de vente ( par ex : Toute commande ou utilisation de nos services implique de plein droit l'acceptation totale et entière des présentes
conditions générales d'exécution des opérations de courses et de tarifs, sans réserve ni clause contraire, et sans pouvoir être modifiées par des stipulations contraires pouvant figurer sur les bons de commande du client ou dans ses propres conditions générales.)

tu dois encore définir précisément la nature de ton activité: ( vente de bijou, quel genre de bijou ou bien jusqu'à quel valeur)

puis les condidtions de réglement :
par ex : Conditions de règlement
Le paiement s'effectue au comptant dès réception de la facture, par chèque ou par virement sauf stipulation contraire
écrite. Dans le cadre de la loi n° 92-1442 du 31 décembre 1992 : Tout retard de règlement entrainera l'exigibilité immédiate
de toutes les sommes restant dues quel que soit le mode de règlement prévu, et le paiement d'un interête de retard calculé
au taux de 15% par an, applicable dès le premier jour de retard. Sa mise en oeuvre est effective dès réception d'une mise
en demeure par lettre recommandée.
( c'est pareil pour tout les commerçant, ils peuvent laisser au minimum 3 mois ( jusqu'à 9 max) avant de porter l'affaire devant une juridiction pour être payé aprés quoi leur affaire n'est plus recevable ( par prescription).

Enfin il faut préciser si les bijou sont assuré, et les condition de livraison. ( par exemple si le client en devient propriétaire au moment où il effectue un versement approvisionné, ou si c'est au moment où il vient prendre le bijou ... (ça à de l'importance au cas où le bijou est perdu, ou volé entre temps, ce n'est pas la même personne qui est responsable et doit payer un indnisation pour le défaut de surveillance ou la perte).

Mais je crois que tout ça tes parents doivent déjà l'avoir quelque part. Si il y a un réglement de la bijouterie, il faudra texto le recopier sur le site.

Voilà. Tu vois en gros c'est une affaire de bon sens, et tout ce que tu ne précise pas sur le site, ça ne sera pas opposable au client parce qu'il sera réputé ne jamais en avoir eut connaissance.

eu j'ai un petit souci avec un autre programme.
c'est une histoire de lecture de code source de page web. J'arrive pas à la foutre dans un offset ( parce qu'il ne s'agit pas de la télécharger mais simplement de le lire, et de l'afficher dans la fenêtre d'execution.
j'arrive à ouvrir une séssion vers la page, mais aprés je conceptualise moins.
0
pyschopathe Messages postés 1974 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
27 oct. 2008 à 14:49
Merci pour les infos ^^ ! Pour ton nouveau problème, j'ai peur de ne pas être d'une grande utilité... Essaie d'ouvrir un nouveau sujet, mets ton code, et je verrai ce que je peux faire.
0
EL barto ! Messages postés 121 Date d'inscription samedi 25 octobre 2008 Statut Membre Dernière intervention 7 août 2009 6
27 oct. 2008 à 15:33
j'ai déjà ouvert une autre discussion avec Kilian.

On est dans la discussion résolue du 25 oct 2008 ( c'est vers le haut du tableau). en fait c'est pas résolu mais y'a eut de tel progrés !
0
DarkRodWarrior Messages postés 1755 Date d'inscription vendredi 2 mars 2007 Statut Membre Dernière intervention 18 mai 2010 91
23 oct. 2008 à 22:48
Je ne m'y connais pas beaucoup en programmation (ok je me tais) mais , il te manque pas d'autres balises ? O_o si c'est bien du C++
-1
pyschopathe Messages postés 1974 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
23 oct. 2008 à 22:57
Le code pour la saisie est plutôt de ce genre :
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  const int TAILLE_CHAINE_MAX = 255;
  int j=0;
  char v[8] = 'bonjour';
  char u[10] = 'au revoir';
  char i[TAILLE_CHAINE_MAX];
  char * p;

  printf( "Ecrivez un texte de la forme : \nblablabla bonjour blablabla au revoir blablabla\n(Maximum %i caracteres)\n", TAILLE_CHAINE_MAX );
  // Tant que le caractere saisi n'est pas un saut de ligne et qu'on n'a pas atteint
  // le nombre de caracteres maximum, on lit et on enregistre dans le tableau.
  for ( j=0 ; i[j] != 10 && j<TAILLE_CHAINE_MAX ; j++ )
    scanf("%c", &i[j]);

  getchar();
  return 0;
} 

Ensuite tu cherches à récupérer dans p le texte enter "bonjour" et "au revoir" c'est ça ?
-1