Chaines de caractère(Langage C)
Fermé
souzen
Messages postés
41
Date d'inscription
dimanche 12 octobre 2008
Statut
Membre
Dernière intervention
5 janvier 2009
-
18 oct. 2008 à 01:28
souzen Messages postés 41 Date d'inscription dimanche 12 octobre 2008 Statut Membre Dernière intervention 5 janvier 2009 - 18 oct. 2008 à 22:55
souzen Messages postés 41 Date d'inscription dimanche 12 octobre 2008 Statut Membre Dernière intervention 5 janvier 2009 - 18 oct. 2008 à 22:55
A voir également:
- Chaines de caractère(Langage C)
- Caractère ascii - Guide
- Caractere speciaux - Guide
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Caractère spéciaux - Guide
- Caractere speciaux mac - Guide
7 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
18 oct. 2008 à 01:59
18 oct. 2008 à 01:59
Si tu veux une version sécurisée (mais plus compliquée ^^), en voici une :
Remarque : je n'ai pas utilisé strcat, car tu as demandé concaténation d'un char et d'une chaîne de caractères ;)
Cdlt
#include <stdio.h> #include <stdlib.h> #include <string.h> char *concat(char *buf,size_t sz, char a){ char *res=malloc(1+strlen(buf)); res[0]=a; strncpy(res+1,buf,sz); return res; } int main(void){ char buf[]="oucou"; char *res; res=concat(buf,sizeof(buf),'c'); printf("%s\n",res); return 0; }
Remarque : je n'ai pas utilisé strcat, car tu as demandé concaténation d'un char et d'une chaîne de caractères ;)
Cdlt
Yuku
Messages postés
199
Date d'inscription
samedi 22 mars 2008
Statut
Membre
Dernière intervention
22 mars 2012
4
18 oct. 2008 à 10:39
18 oct. 2008 à 10:39
Alors, pour ma part je vais te montrer une autre fonction qui est très utile pour les chaînes de caractères, c'est fgets/gets.
Voilà un code que j'ai tapé juste pour le fun et pour m'entraîner aux chaînes de caractères, je reconnais avoir mis beaucoup de temps avant d'arriver à un résultat correct !
Il est bourré de commentaires, prenez-le et copiez-le dans votre environnement de développement pour bien comprendre ;)
Bonne prog !
Voilà un code que j'ai tapé juste pour le fun et pour m'entraîner aux chaînes de caractères, je reconnais avoir mis beaucoup de temps avant d'arriver à un résultat correct !
Il est bourré de commentaires, prenez-le et copiez-le dans votre environnement de développement pour bien comprendre ;)
Bonne prog !
/*Auteur : Yuki But de ce programme : Demander à l'utilisateur de rentrer des informations et demander s'il est d'accord ou non avec ce qu'il a rentré, puis les afficher sans rencontrer les difficultés suivantes : - Effacement de la chaîne dans la mémoire, - Non-prise en compte de l'espace avec scanf, - Eviter de stocker l'"Entree" dans la chaine, - Nettoyer le buffer (mémoire tampon). ___________________________________________________________________________________________________________________________*/ #include <string.h> #include <stdio.h> #include <stdlib.h> /*La biliothèque string est nécessaire pour quelques fonctions ci-dessous.*/ using namespace std; static void search(char *chaine); /*Où est l'intérêt de cette fonction search? On va y venir durant le programme et la fonction main ! ____________________________________________________________________________________________________________________________*/ int main(int argc, char *argv[]) { char util[100], adversaire[100], OHV[100]; /*Primo : les chaines de caractères sont des tableaux de char ! Grosso modo, retiens que tu vas mettre dans le tableau le nombre de caractères que tu vas y entrer :) */ char choix; /*Un choix de l'utilisateur : a-t-il ou non rentré la bonne chaîne ?*/ do{ /*Boucle do...while classique : on répète la question tant qu'il n'est pas d'accord avec ce qu'il a rentré*/ printf("\nComment vous appelez-vous?\t"); fgets(util, sizeof util, stdin); /* fgets au lieu de scanf */ /*FONCTIONNEMENT DE FGETS : fgets(nom de la variable, taille de la variable, endroit où est stocké l'info A noter que stdin correspond au buffer/mémoire tampon, c'est à dire là où vont les infos que l'on tape avec un scanf ou un fgets!*/ search(util); printf("\nVous vous appelez donc %s ? (O=Oui, N=Non)\t", util); scanf("%c", &choix); fflush(stdin); if(choix=='O' && choix!='N') { printf("\nD'accord, votre nom est donc "); } }while(choix=='N'); printf("%s !\n\n", util); fflush(stdin); /*Première partie achevée : on a demandé à l'utilisateur son nom et on l'a renvoyé à l'écran. _______________________________________________________________________________________________________________________*/ do{ printf("\nLe nom de votre rival?\t\t"); fgets(adversaire, sizeof adversaire, stdin); search(adversaire); printf("\nVotre rival est donc %s ? (O=Oui, N=Non)\t", adversaire); scanf("%c", &choix); fflush(stdin); if(choix=='O' && choix!='N') { printf("\nAh mais oui, c'est "); } }while(choix=='N'); printf("%s votre rival!\n\n", adversaire); fflush(stdin); /*_______________________________________________________________________________________________________________________*/ do{ printf("\nEt ou habitez-vous?\t\t"); fgets(OHV, sizeof OHV, stdin); search(OHV); printf("\nVous habitez donc a %s ? (O=Oui, N=Non) ?\t", OHV); scanf("%c", &choix); fflush(stdin); if(choix=='O' && choix!='N') { printf("\nVous etes donc "); } }while(choix=='N'); printf("%s, de %s !\n\n\n", util, OHV); fflush(stdin); system("PAUSE"); return 0; } /*Ici, le programme est terminé, mais on doit toujours faire appel à une fonction "search", la voici : */ static void search(char *chaine) /*En fait, cette fonction sert à ne pas prendre en compte le "retour chariot" (le fait d'appuyer sur Entrée) que l'utilisateur fait lorsqu'il rentre sa chaine. En effet, fgets est tellement efficace qu'elle prend tout en compte... Même les entrées !*/ { char *p = strchr(chaine, '\n'); if (p) { *p = 0; } } /*_______________________________________________________________________________________________________________________ Deux conseils : pour vérifier l'utilité des fonctions suivantes, retirez-les du programme pour voir ce qui va se passer ! - fflush(stdin) : lavement du buffer, sans cela on conserve la variable "choix" tout juste entrée dedans et la nouvelle variable relative à l'utilisateur est "sautée". - search() : sans cela, on va avoir un petit problème, à vous de retirer cette fonction aussi pour vérifier ! ;) Bonne Prog !*/
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
18 oct. 2008 à 10:48
18 oct. 2008 à 10:48
Salut,
using namespace std; ce n'est pas du C mais du C++
inutile vu que tu as la directive #include <stdio.h>
using namespace std; ce n'est pas du C mais du C++
inutile vu que tu as la directive #include <stdio.h>
BadGuitarist
Messages postés
367
Date d'inscription
dimanche 12 octobre 2008
Statut
Membre
Dernière intervention
20 octobre 2013
27
18 oct. 2008 à 01:43
18 oct. 2008 à 01:43
Bonjour,
Juste pour t'aider car cela fait pas mal de temps que je n'ai pas développé en C.
Peut-être ceci pourrait t'aider :
Juste pour t'aider car cela fait pas mal de temps que je n'ai pas développé en C.
Peut-être ceci pourrait t'aider :
#include <stdio.h> #include <string.h> main() { char ch1[50] = "s" ; char *ch2 = "bonjour" ; strcat("s" ,ch2); printf("Résultat :%s\n" ,ch1); }
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
18 oct. 2008 à 07:45
18 oct. 2008 à 07:45
Salut,
avec la classique boucle for sans utiliser ni strcat, ni strncpy
avec la classique boucle for sans utiliser ni strcat, ni strncpy
#include<stdio.h> #include<stdlib.h> void concatener_caractere (char c, char *source, char *dest, int taille); int main () { char c; int taille; char *destination; char *source; printf ("Caractère? "); scanf ("%c", &c); printf ("Taille chaine source? "); scanf ("%d", &taille); source = malloc (taille); destination = malloc (taille + 1); printf ("Chaine source? "); scanf ("%s", source); concatener_caractere (c, source, destination, taille); printf ("%s\n%s\n", source, destination); return 0; } void concatener_caractere (char c, char *source, char *dest, int taille){ int i; dest[0] = c; for (i = 1; i < taille + 1; ++i) dest[i] = source[i - 1]; }Le résultat
lami20j@debian:~$ ./a.out Caractère? A Taille chaine source? 20 Chaine source? bbbbbbbbbbbbbbbbbbbb bbbbbbbbbbbbbbbbbbbb Abbbbbbbbbbbbbbbbbbbb
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
18 oct. 2008 à 19:40
18 oct. 2008 à 19:40
Je viens de relire ton code et le mien. Il y a un point commun. L'oubli de free ^^
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Yuku
Messages postés
199
Date d'inscription
samedi 22 mars 2008
Statut
Membre
Dernière intervention
22 mars 2012
4
18 oct. 2008 à 10:50
18 oct. 2008 à 10:50
Ouais au temps pour moi ^^
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
18 oct. 2008 à 11:33
18 oct. 2008 à 11:33
D'ailleurs, le fflush(stdin) ne devrait pas exister ;)
souzen
Messages postés
41
Date d'inscription
dimanche 12 octobre 2008
Statut
Membre
Dernière intervention
5 janvier 2009
26
18 oct. 2008 à 22:55
18 oct. 2008 à 22:55
je vous remercie bcp pour votre aide