Programme - C

Fermé
Scarface030 Messages postés 11 Date d'inscription samedi 26 avril 2008 Statut Membre Dernière intervention 17 juillet 2008 - 16 juil. 2008 à 23:05
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 17 juil. 2008 à 14:39
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

7 réponses

mamiemando Messages postés 33410 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 2 décembre 2024 7 808
17 juil. 2008 à 00:26
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
0
Scarface030 Messages postés 11 Date d'inscription samedi 26 avril 2008 Statut Membre Dernière intervention 17 juillet 2008
17 juil. 2008 à 00:56
Ok merci beaucoup :d
0
Scarface030 Messages postés 11 Date d'inscription samedi 26 avril 2008 Statut Membre Dernière intervention 17 juillet 2008
17 juil. 2008 à 01:07
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 .
0
Scarface030 Messages postés 11 Date d'inscription samedi 26 avril 2008 Statut Membre Dernière intervention 17 juillet 2008
17 juil. 2008 à 01:09
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 .
0

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

Posez votre question
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
17 juil. 2008 à 08:31
oui, c'est possible, mais il faut faire les correspondances toi même.
0
Scarface030 Messages postés 11 Date d'inscription samedi 26 avril 2008 Statut Membre Dernière intervention 17 juillet 2008
17 juil. 2008 à 13:52
Oui sa je sais , mais j'aimerais le code qui me permette de le faire .

Merci .
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
17 juil. 2008 à 14:39
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.
0