Programme - C

Bonsoir, je ne suis pas très fort en programmation , et je cherche a faire un programme en C
qui puisse par exemple quand on tape un mot sa sort un autre mot ou phrase .
( "Si j'écris sa , Alors sa écris sa" ) , est ce possible ? Si oui, votre aide serait la bienvenue .

Merci et Bonne soirée
Configuration: Windows XP
Firefox 3.0

7 réponses

  • Votes
  • Date
  • Date décroissante
  1. Modérateur
    Oui c'est possible, en C ou en C++. Dans les deux cas il suffit d'utiliser getline().

    En C++ c'est le plus facile :
    #include <iostream>
    #include <string>
    
    int main(){
        std::string buffer;
        std::cout << "tapez une phrase et appuyez sur 'entrée'" << std::endl;
        std::getline(std::cin,buffer);
        std::cout << "vous avez tapé " << buffer << std::endl;
        return 0;
    }
    

    ce qui donne après compilation :
    tapez une phrase et appuyez sur 'entrée'
    j'aime les tapirs
    vous avez tapé j'aime les tapirs
    

    En C pur :
    #define _GNU_SOURCE
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(){
        unsigned buffer_size = 255;
        char *buffer = (char *)malloc(buffer_size*sizeof(char)); // allouer le buffer
        printf("tapez une phrase et appuyez sur 'entrée'\n");
        getline(&buffer,&buffer_size,stdin);
        printf("vous avez tapé %s",buffer);
        free(buffer); // libérer le buffer
        return 0;
    }
    

    Tu noteras qu'en C c'est un peu plus compliqué car il faut allouer un buffer et faire le #define qui va bien, comme indiqué quand tu cherches "man getline" sur google :
    http://man.developpez.com/man3/getline.3.php

    Le buffer est sensé être agrandi si la chaîne lue est plus grande (cf man). Par contre il faut bien penser à le désallouer quand on n'en a plus besoin.

    Attention : l'utilisation d'un scanf (en C) ou de l'opérateur >> sur std::cin (en C++) n'extrait que le premier mot de la phrase, car un espace est considéré comme un séparateur de chaîne.

    Bonne chance
    1. Mamiemando, en fait la ça me réécris ce que je viens d'écrire , c'est pas exactement sa que je veux c'est par exemple si on tape le titre d'une chanson , sa m'écrive le titre , ou par exemple si on écrit " salut ça va ? " sa écrive " oui et toi ? "

      Merci .
      1. Oups, je me suis tromper dans une phrase : " si on tape le titre d'une chanson , sa m'écrive le titre " >>> si on tape le titre d'une chanson , sa m'écrive l'artiste .
        1. Contributeur
          oui, c'est possible, mais il faut faire les correspondances toi même.
          1. Oui sa je sais , mais j'aimerais le code qui me permette de le faire .

            Merci .
            1. Contributeur
              et ben, il y a plusieurs choix, tu peux utiliser des map je crois, ou des tableaux :
              std::vector<std::string> cores[2];
              tu rempli cores en mettant la phrase à comprendre dans la case 0 du tableau et la phrase à écrire dans la case 1;
              for(int i=0;i<cores[0].size();++i)
              if(cores[0][i]==buffer)
              { std::cout<<cores[1][i];break; }
              Le plus fastidieu étant maintenant de taper les correspondances.