Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 10/01/2008, à 12:05

lomdefer

comment faire un tableau de chaine de caractère ?

Est-ce qu'on ecrit un tableau de chaine de caractère comme cela ??

depart = {"2C", "3C", "4C", "5C", "6C", "7C", "8C", "9C", "10C", "VaC", "DaC", "RoiC", "AsC",
         "2K", "3K", "4K", "5K", "6K", "7K", "8K", "9K", "10K", "VaK", "DaK", "RoiK", "AsK",
         "2P", "3P", "4P", "5P", "6P", "7P", "8P", "9P", "10P", "VaP", "DaP", "RoiP", "AsP",
         "2T", "3T", "4T", "5T", "6T", "7T", "8T", "9T", "10T", "VaT", "DaT", "RoiT", "AsT"};

Hors ligne

#2 Le 10/01/2008, à 12:06

Sysko le prospecteur

Re : comment faire un tableau de chaine de caractère ?

Quel langage ?


Projet tatoeba : projet collaboratif visant à créer un corpus de phrases d'exemples traduites dans le plus de langues possibles

Hors ligne

#3 Le 10/01/2008, à 12:10

lomdefer

Re : comment faire un tableau de chaine de caractère ?

En langage C.

Hors ligne

#4 Le 10/01/2008, à 12:12

lomdefer

Re : comment faire un tableau de chaine de caractère ?

En fait ce tableau représente un jeu de cartes qu'il faut que je mélange, j'ai déja l'algorithme pour le melanger il faut dra juste que je l'adapte pour un tableau de chaine de caractère car pour l'instant il melange un tableau d'entier.

Hors ligne

#5 Le 10/01/2008, à 12:14

Benzo

Re : comment faire un tableau de chaine de caractère ?

Et quel est ton soucis ? ça ne compile pas ?

Hors ligne

#6 Le 10/01/2008, à 12:24

lomdefer

Re : comment faire un tableau de chaine de caractère ?

Ben quand je compile sa me met :

luc@luc-desktop:~/Bureau$ gcc ./poker2.c -o poker2
./poker2.c: In function «main":
./poker2.c:14: erreur: expected expression before «{" token

et la ligne 14 c'est la premiere ligne du tableau depart.
Et je vois pas ce qui cloche.

Hors ligne

#7 Le 10/01/2008, à 12:31

torototo

Re : comment faire un tableau de chaine de caractère ?

ben si tu initialise a la declaration de la variable , il faut deja donner le bon type.

genre pour un tableau de 52 chaines de caracteres :

  
   char  *depart[52] = {"2C", "3C", "4C", "5C", "6C", "7C", "8C", "9C", "10C", "VaC", "DaC", "RoiC", "AsC",
         "2K", "3K", "4K", "5K", "6K", "7K", "8K", "9K", "10K", "VaK", "DaK", "RoiK", "AsK",
         "2P", "3P", "4P", "5P", "6P", "7P", "8P", "9P", "10P", "VaP", "DaP", "RoiP", "AsP",
         "2T", "3T", "4T", "5T", "6T", "7T", "8T", "9T", "10T", "VaT", "DaT", "RoiT", "AsT"};

   int i;

    for(i=0;i<52;i++)
	    printf("%s ",depart[i]);

#8 Le 10/01/2008, à 13:06

lomdefer

Re : comment faire un tableau de chaine de caractère ?

mais en ait j'ai fait un typedef c'est pour sa que je marque jsute depart={....}
#define MAGNITUDE_MAX 52
char tab[MAGNITUDE_MAX];  /* tableau de maximum 52 valeur */

voici mon code :

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

#define MAGNITUDE_MAX 52
typedef char tab[MAGNITUDE_MAX];  /* tableau de maximum 52 valeur */


int main(int argc, char *argv[]){
  int nbre_element,i,j,x,c,temp,k;
  tab depart;
  
depart={ '2C', '3C', '4C', '5C', '6C', '7C', '8C', '9C', '10C', 'VaC', 'DaC', 'RoiC', 'AsC',
         '2K', '3K', '4K', '5K', '6K', '7K', '8K', '9K', '10K', 'VaK', 'DaK', 'RoiK', 'AsK',
         '2P', '3P', '4P', '5P', '6P', '7P', '8P', '9P', '10P', 'VaP', 'DaP', 'RoiP', 'AsP',
         '2T', '3T', '4T', '5T', '6T', '7T', '8T', '9T', '10T', 'VaT', 'DaT', 'RoiT', 'AsT' }
 
  srand (time (0));

for(j=0;j<nbre_element;j++){ /* ici on met les elements (ici des entier) dans un tableau */
    x=atoi(argv[j+1]);
    depart[j]=x;
 printf("%d ",x);
  }
printf("**** CARTES NON MELANGEES ****");
printf("\n");

for (k=nbre_element; k>0; k--){  /* ici on est censer les melanger */
   c = rand() % k;
   temp = depart[c];
   depart[c] = depart[k-1];
   depart[k-1] = temp;
printf("%d ",temp);
}
printf("**** CARTES MELANGEES ****");
printf("\n");
 exit(0);
}

Hors ligne

#9 Le 10/01/2008, à 13:21

Benzo

Re : comment faire un tableau de chaine de caractère ?

t'as pas le droit de faire ça.
Tu ne peux initialiser un tableau de cette manière qu'à la déclaration.

tab depart ={ '2C', '3C', '4C', '5C', '6C', '7C', '8C', '9C', '10C', 'VaC', 'DaC', 'RoiC', 'AsC',
         '2K', '3K', '4K', '5K', '6K', '7K', '8K', '9K', '10K', 'VaK', 'DaK', 'RoiK', 'AsK',
         '2P', '3P', '4P', '5P', '6P', '7P', '8P', '9P', '10P', 'VaP', 'DaP', 'RoiP', 'AsP',
         '2T', '3T', '4T', '5T', '6T', '7T', '8T', '9T', '10T', 'VaT', 'DaT', 'RoiT', 'AsT' }

Hors ligne

#10 Le 10/01/2008, à 13:49

Sysko le prospecteur

Re : comment faire un tableau de chaine de caractère ?

la manière donné par torototo  est bonne   je dirais même qu'en tant qu'informaticien ( donc avec un poil dans la main  )

on peut faire  char*  depart[]  =  .....

bon  c'est vrai que dans ton cas tu sais  exactement combien d'element il y a  , mais  pour d'autre programme  ou l'on est  amené  à  modifier au fur  et à  mesure  le code   et  à  rajouter enlever des   chaines de caract   à   notre  tableau  on es content de ne pas avoir à  recompter   le nombre d'élément

sinon  vraiment éviter au maximun les typedef ,   à  part vraiment pour lesstructures ou la leur utilité est vraiment justifié   mais sinon  on risque plus de s'emmeler les pinceaux  et  surtout  un personne  tierce qui  relit ton code  devra  faire un effort supplémentaire pour comprendre  d'ou vient le  nouveau  type

Dernière modification par Sysko le prospecteur (Le 10/01/2008, à 13:51)


Projet tatoeba : projet collaboratif visant à créer un corpus de phrases d'exemples traduites dans le plus de langues possibles

Hors ligne

#11 Le 10/01/2008, à 13:50

lomdefer

Re : comment faire un tableau de chaine de caractère ?

Sa veut dire quoi l'étoile ??

Hors ligne

#12 Le 10/01/2008, à 13:51

Sysko le prospecteur

Re : comment faire un tableau de chaine de caractère ?

c'est un  pointeur

si  tu  ne  c'est pas ce que  sais  regarde sur le site du zero
ou sur developpez.com

tu pourras y trouver des bon cours pour t'expliquer  en détail  ce qu'es  un pointeur  et  leur toute puissance


en  gros

int  x   est un  entier  ok
int*  P_x   est un pointeur sur un entier

cela veut dire que  si tu affiche la valeur de P_x  tu aura l'adresse dans la memoire ou est stocké  la  valeur de la variable  x


ensuite pour les  tableaux
quand tu declare 

int   montableau[10]   ,  montableau[x]  designe  un entier
et montableau   est   un  pointeur sur le premier element du tableau

Dernière modification par Sysko le prospecteur (Le 10/01/2008, à 13:55)


Projet tatoeba : projet collaboratif visant à créer un corpus de phrases d'exemples traduites dans le plus de langues possibles

Hors ligne

#13 Le 10/01/2008, à 13:54

Benzo

Re : comment faire un tableau de chaine de caractère ?

http://casteyde.christian.free.fr/cpp/cours/online/c1540.html

Hors ligne

#14 Le 10/01/2008, à 13:58

Watchwolf

Re : comment faire un tableau de chaine de caractère ?

A mon avis ce serait plus simple que tu definisse un type énuméré avec toute les cartes (2C ...), c'est plus simple de travailler sur des entiers que sur des chaines et ca t'evitera d'avoir des pbs de pointeurs, mémoires ...

Hors ligne

#15 Le 10/01/2008, à 14:01

Benzo

Re : comment faire un tableau de chaine de caractère ?

Ben y a surement plus simple, mais il utilise une procédure déjà  toute faite qui s'appuie sur une structure de tableau.
Je crois pas que commencer à  lui faire l'audit de ses structures de données soit dans son intérêt. A mon avis il veux juste porter sa petite fonction pour un usage avec des char* et c'est tout.
Donc le problème est résolu, merci de marquer [RESOLU] dans le titre du sujet smile

Hors ligne

#16 Le 10/01/2008, à 18:02

Aurel34

Re : comment faire un tableau de chaine de caractère ?

l'option:

char *depart[] ={ '2C', '3C', '4C', '5C', '6C', '7C', '8C', '9C', '10C', 'VaC', 'DaC', 'RoiC', 'AsC',
         '2K', '3K', '4K', '5K', '6K', '7K', '8K', '9K', '10K', 'VaK', 'DaK', 'RoiK', 'AsK',
         '2P', '3P', '4P', '5P', '6P', '7P', '8P', '9P', '10P', 'VaP', 'DaP', 'RoiP', 'AsP',
         '2T', '3T', '4T', '5T', '6T', '7T', '8T', '9T', '10T', 'VaT', 'DaT', 'RoiT', 'AsT' };

me paraà®t la plus valable. C'est du C ansi et tu peux même récupérer la taille du tableau à  la compilation facilement

size_t taille;
...
taille = sizeof(depart)/sizeof(char*);

après il y a des petits à  cà´tés, comme le fait que les chaines de caractères soient constantes: on ne paut pas faire

depart[2][1]='x';    // bug

mais c'est contournable, par exemple avec strdup (dispo dans <string.h>)

char *chaine_modifiable;
...
chaine_modifiable = strdup(depart[5]);
chaine_modifiable[1] = 'x';   // là  ça marche
...
free(chaine_modifiable); // à  ne pas oublier

#17 Le 10/01/2008, à 20:28

Sysko le prospecteur

Re : comment faire un tableau de chaine de caractère ?

depart[2][1]='x';

sur certaine implémentation cela marchera , car la dessus la norme laisse le choix   mais  après  tu peut selon les avoir des abberations  ensuite 

ex sur certaine implementation si tu fais

char* ma_chaine="Bonjour"

ma_chaine[0]='Z';

printf ( "%s" , "Bonjour" )

cela t'affichera  Zonjour
bizarre non^^ (  j'avais testé cela il  y a longtemps  donc je ne sais pas si sur des pc moderne  on  retrouve  toujours cela )


Projet tatoeba : projet collaboratif visant à créer un corpus de phrases d'exemples traduites dans le plus de langues possibles

Hors ligne

#18 Le 10/01/2008, à 23:06

telliam

Re : comment faire un tableau de chaine de caractère ?

tout depend des options de compilation et de linkage avec lequel tu vas compiler ton programme.
Dans certaines configuration, la Chaine "bonjour" sera stocké dans la section read-only Data du programme ( d'ou le bug si tu essayes d'ecrire dedans), dans d'autres configurations elle sera dans les zones de Data "classiques"


"- Un intellectuel assis va moins loin qu'un con qui marche."
Maurice Biraud - Un Taxi pour Tobrouk
Michel Audiard

Hors ligne

#19 Le 10/01/2008, à 23:07

telliam

Re : comment faire un tableau de chaine de caractère ?

tout depend des options de compilation et de linkage avec lequel tu vas compiler ton programme.
Dans certaines configuration, la Chaine "bonjour" sera stocké dans la section read-only Data du programme ( d'ou le bug si tu essayes d'ecrire dedans), dans d'autres configurations elle sera dans les zones de Data "classiques"


"- Un intellectuel assis va moins loin qu'un con qui marche."
Maurice Biraud - Un Taxi pour Tobrouk
Michel Audiard

Hors ligne

#20 Le 11/01/2008, à 09:11

Benzo

Re : comment faire un tableau de chaine de caractère ?

Ca lui sert à rien ce que vous dites.
Il veut pas le modifier son truc, c'est sa base de cartes !!

d'ailleurs si vous voulez lui proposer une vraie optimisation qui sert, proposez lui de mettre son tableau en const.

Hors ligne

#21 Le 11/01/2008, à 10:18

lomdefer

Re : comment faire un tableau de chaine de caractère ?

bon voila, j'ai bosser dessus et voici ce que j'ai fait, c'est plus compliquer que vous mais vu mes connaissances je trouve pas toujours les solutions optimum.
Voici le code :

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

#define MAGNITUDE_MAX 52
typedef char tab[MAGNITUDE_MAX];

void affichage_jeu_carte(tab nombre, tab couleur){
	int j; 
	for(j=0;j<MAGNITUDE_MAX;j++){ /* ici on met les elements dans un tableau */
        printf("%c",nombre[j]);
  	printf("%c ",couleur[j]);

	if(((j-12) % 13==0)&&(j!=0)){/* je met une condition pour aller a la ligne toutes les 13 cartes */
	printf("\n");
	}	
	else{
        }
     }
}
void melange_jeu_carte(tab nombre, tab couleur){
	int k,c;
	char temp, temp2;
	for(k=MAGNITUDE_MAX; k>0; k--){  /* ici on est censer les melanger */
  	  c = rand() % k;
 	  temp = nombre[c];
 	  nombre[c] = nombre[k-1];
  	  nombre[k-1] = temp;
          printf("%c",temp);
	  temp2 = couleur[c];
	  couleur[c] = couleur[k-1];
          couleur[k-1] = temp2;         
          printf("%c ",temp2);

	if(((k-1) % 13==0)&&(k!=MAGNITUDE_MAX)){/* je met une condition pour aller a la ligne toutes les 13 cartes */
	printf("\n");
	}
	else{
	}
   }
}

int main(int argc, char *argv[]){
  	
       tab nombre={ '2', '3', '4', '5', '6', '7', '8', '9', 'd', 'V', 'D', 'R', 'A', '2', '3', '4', '5', '6', '7', '8', '9', 'd', 'V', 'D', 'R', 'A', '2', '3', '4', '5', '6', '7', '8', '9', 'd', 'V', 'D', 'R', 'A', '2', '3', '4', '5', '6', '7', '8', '9', 'd', 'V', 'D', 'R', 'A' };

       tab couleur={ 'C', 'K', 'P', 'T', 'C', 'K', 'P', 'T', 'C', 'K', 'P', 'T', 'C', 'K', 'P', 'T', 'C', 'K', 'P', 'T', 'C', 'K', 'P', 'T', 'C', 'K', 'P', 'T', 'C', 'K', 'P', 'T', 'C', 'K', 'P', 'T', 'C', 'K', 'P', 'T', 'C', 'K', 'P', 'T', 'C', 'K', 'P', 'T', 'C', 'K', 'P', 'T',};
        srand (time (0));

printf("\n");
printf("**** CARTES NON MELANGEES ****");
printf("\n");
printf("\n");
affichage_jeu_carte(nombre, couleur);
printf("\n");
printf("\n");

printf("**** CARTES MELANGEES ****");
printf("\n");
printf("\n");
melange_jeu_carte(nombre, couleur);
printf("\n");
printf("\n");

 exit(0);
	}

Donc en gros j'ai deux listes, une pour les nombre, une autre pour les couleurs je melange les deux et je les assemble indirectement par la fonction printf.

Dernière modification par lomdefer (Le 11/01/2008, à 10:20)

Hors ligne

#22 Le 11/01/2008, à 10:53

lomdefer

Re : comment faire un tableau de chaine de caractère ?

Une petite question !!
dans un "for" est ce qu'on a le droit de faire :

for(i=0;i<30;i+=5);

Pour avancer de 5 en 5 ??

Hors ligne

#23 Le 11/01/2008, à 11:06

Sysko le prospecteur

Re : comment faire un tableau de chaine de caractère ?

bien sur  tu   même faire  des


int i  , j ; 
for  ( i  = 0 , j = 78 ;  i <  15 , j > 60 ;  i++ ,  j-=10 )
 {
 // du code
 }

Dernière modification par Sysko le prospecteur (Le 11/01/2008, à 12:16)


Projet tatoeba : projet collaboratif visant à créer un corpus de phrases d'exemples traduites dans le plus de langues possibles

Hors ligne