#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
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