Rechercher : dans
Par :

Chaines de caractère(Langage C)

Dernière réponse le 18 oct 2008 à 22:55:19 souzen, le 18 oct 2008 à 01:28:04 
 Signaler ce message aux modérateurs

Bonjour,
s'il vous plait comment peut on ecrire un partie de programme qui insère le caractère 's' au début d'une chaine dde caractère dans le langage C

Configuration: Windows XP
Internet Explorer 7.0

Meilleures réponses pour « chaines de caractère(Langage C) » dans :
Langage C - Les chaînes de caractères Voir Qu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C, une chaîne...
Les chaînes de caractères en C++ VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C++, une...
Langage C - Les variables VoirLe concept de variable Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. Les variables en langage C sont typées, c'est-à-dire que les données contenues dans...
Langage C - Les types de données VoirLes types de données Les données manipulées en langage C sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître l'occupation mémoire (le...

1

BadGuitarist, le 18 oct 2008 à 01:43:49

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 :

  #include <stdio.h>
  #include <string.h>
  main()
  {
    char ch1[50] = "s" ;
    char *ch2     = "bonjour" ;
    strcat("s" ,ch2);
    printf("Résultat :%s\n" ,ch1);
 }

Répondre à BadGuitarist

2

fiddy, le 18 oct 2008 à 01:59:55
  • +2

Si tu veux une version sécurisée (mais plus compliquée ^^), en voici une :

#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
Google is your friend

Répondre à fiddy

3

lami20j, le 18 oct 2008 à 07:45:16

Salut,

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
106485010510997108

Répondre à lami20j

8

fiddy, le 18 oct 2008 à 19:40:02

Je viens de relire ton code et le mien. Il y a un point commun. L'oubli de free ^^
Google is your friend

Répondre à fiddy

4

Yuku, le 18 oct 2008 à 10:39:37

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 !


/*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 !*/

Répondre à Yuku

5

lami20j, le 18 oct 2008 à 10:48:09

Salut,

using namespace std; ce n'est pas du C mais du C++
inutile vu que tu as la directive #include <stdio.h> 106485010510997108

Répondre à lami20j

6

Yuku, le 18 oct 2008 à 10:50:48

Ouais au temps pour moi ^^

Répondre à Yuku

7

fiddy, le 18 oct 2008 à 11:33:37

D'ailleurs, le fflush(stdin) ne devrait pas exister ;)
Google is your friend

Répondre à fiddy

9

 souzen, le 18 oct 2008 à 22:55:19

Je vous remercie bcp pour votre aide

Répondre à souzen