Un truc tout bête et pourtant casse tête
RésoluEL barto ! Messages postés 124 Statut Membre -
alors là je sais que je suis au comble du ridicule MAIS ( !) j'ai pourtant besoin de vos conseil.
Je veux definir des constate de caractère, et les afficher.
je veux que char v avec v = 'bonjour"
et char u avec u = "au revoir"
et rechercher dans un texte les mots compris entre "bonjour" et au "revoir" voici ce que j'ai commencé à faire :
------------------------------------------------------------------------------------------------------
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char v = 'bonjour';
char u = 'au revoir';
char i, p ; i correspond à l'ensemble du texte
p correspond au texte compris entre 'bonjour' et au 'revoir'
printf (" ecrivez un texte tel que :\n blablabla bonjour blablabla au revoir blablabla\n");
scanf ("%c", &i);
getchar();
return 0;
}
--------------------------------------------------------------------------------------------------------
alors est ce que j'aborde le problème de la bonne manière ?
est ce que je défini bien mes constantes ?
Configuration: Windows XP Firefox 3.0.3
- Un truc tout bête et pourtant casse tête
- Pense bete - Guide
- Tête de parabole défectueuse - Forum TV & Vidéo
- Un mot est caché dans l’en-tête du document. pour le trouver, modifiez sa couleur. - Forum Word
- Pense-bête télécharger - Télécharger - Organisation
- Un mot est caché dans l'en-tête du document. pour le trouver, modifiez sa couleur. ✓ - Forum Word
63 réponses
- 1
- 2
- 3
- 4
Le sujet porte sur la définition de constantes chaîne et l’extraction d’une sous-chaîne comprise entre les marqueurs bonjour et au revoir dans un texte, avec des variables v et u.
Certaines propositions préconisent d’employer des chaînes (char* ou const char*) plutôt que des caractères simples, et d’utiliser strlen et strncmp pour repérer le début et la fin entre bonjour et au revoir sans allocations dynamiques.
En pratique, l’une des approches propose une solution utilisant tableaux fixes et des pointeurs, avec des boucles et strlen pour localiser la sous-chaîne entre bonjour et au revoir.
Des éléments ultérieurs soulignent des erreurs potentielles liées à la mémoire, et recommandent des chaînes constantes avec une saisie contrôlée pour éviter dépassements et fautes de segmentation.
et là , je vois vraiment pas pourquoi . tu vois toi ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionil me redis que c'est trop long pour ce type . j'ai essayé en enlevant les (') .. il me répete que bonjour es undeclared.
Il faut absolument qu'il connaisse bonjour et au revoir, sinon il ne pourra pas les reconnaitre dans le texte.
alors j'avoue être paumé.
comment on déclare une chaine de caractère d'habitude , comme ça non ?
char v=bonjour
??
je passe en pb résolu, et si je n'y arrive pas, et bien je reste " jeun's" ,
et toi aussi ! ;) merci
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
const int TAILLE_CHAINE_MAX = 255;
char debut[] = "bonjour";
char fin[] = "au revoir";
char chaine[TAILLE_CHAINE_MAX];
chaine[0] = -1; // Pour éviter que la valeur soit à 10 dès le départ, ce qui nous ferait sortir de la boucle
chaine[TAILLE_CHAINE_MAX-1] = "\0";
char * sous_chaine;
int i = 0;
int indice_debut, indice_fin;
int taille = strlen( debut );
int ok = 0;
printf( "Écrivez un texte de la forme : \nblablabla bonjour blablabla au revoir blablabla\n(Maximum %i caractères)\n", TAILLE_CHAINE_MAX );
// Tant que le caractère saisi n'est pas un saut de ligne et qu'on n'a pas atteint
// le nombre de caractères maximum, on lit et on enregistre dans le tableau.
for ( i=0 ; chaine[i] != 10 && i<TAILLE_CHAINE_MAX-1 ; ++i )
scanf("%c", &chaine[i]);
if ( i < TAILLE_CHAINE_MAX-1 )
chaine[i] = "\0";
i = 0;
while ( chaine[i] != "\0" && !ok ) {
// Si on trouve debut dans la chaine saisie
if ( strncmp( chaine[i], debut, taille ) == 0 ) {
indice_debut = i = i + taille;
taille = strlen( fin );
// On cherche maintenant la chaine fin
while ( chaine[i] != "\0" && i < strlen( chaine ) - taille ) {
// Si on trouve la chaine fin...
if ( strncmp( chaine[i], fin, taille ) == 0 ) {
// ...on enregistre l'indice
indice_fin = i-1;
// ...on sort
ok = 1;
break;
}
++i;
}
}
++i;
}
// On recopie la sous-chaine comprise entre les indices de début et de fin dans la variable sous_chaine
sous_chaine = malloc( ( indice_fin - indice_debut) * sizeof( char ) );
strncpy( sous_chaine, chaine[indice_debut], indice_fin - indice_debut );
printf( "La sous-chaine trouvée est : %s", sous_chaine );
getchar();
return 0;
}
Il arrive la même chose que ce que tu m'avais expliqué pour la boucle infinie qui fait apparaitre la fenêtre window.
J'en conclue ( mais bon .. mes conclusions tu sais .... ) qu'il doit y avoir là encore une boucle qui n'est pas fermée .
Je suis en train de la chercher.
(mais je ne lis pas aussi vite le code que tu l'écris :)
ps: ( avant j'était " rem's ") j'ai publié la question "j'ai un problème de programmation à résoudre".
------------------------------------
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
const int TAILLE_CHAINE_MAX = 255;
char debut[] = "bonjour";
char fin[] = "au revoir";
char chaine[TAILLE_CHAINE_MAX];
chaine[0] = -1; // Pour éviter que la valeur soit à 10 dès le départ, ce qui nous ferait sortir de la boucle
chaine[TAILLE_CHAINE_MAX-1] = "\0";
char * sous_chaine;
int i = 0;
int indice_debut, indice_fin;
int taille = strlen( debut );
int ok = 0;
printf( "Écrivez un texte de la forme : \nblablabla bonjour blablabla au revoir blablabla\n(Maximum %i caractères)\n", TAILLE_CHAINE_MAX );
// Tant que le caractère saisi n'est pas un saut de ligne et qu'on n'a pas atteint
// le nombre de caractères maximum, on lit et on enregistre dans le tableau.
for ( i=0 ; chaine[i] != 10 && i<TAILLE_CHAINE_MAX-1 ; ++i )
scanf("%c", &chaine[i]);
if ( i < TAILLE_CHAINE_MAX-1 )
chaine[i] = "\0";
i = 0;
while ( i < strlen( chaine ) && !ok ) {
printf( "Comparaison des chaines suivantes :\n"%s"\n"%s"\n\tTaille : %i\n", chaine[i], debut, taille );
// Si on trouve debut dans la chaine saisie
if ( strncmp( chaine[i], debut, taille ) == 0 ) {
i = i + taille;
indice_debut = i;
taille = strlen( fin );
// On cherche maintenant la chaine fin
while ( i < strlen( chaine ) - taille ) {
// Si on trouve la chaine fin...
if ( strncmp( chaine[i], fin, taille ) == 0 ) {
// ...on enregistre l'indice
indice_fin = i-1;
// ...on sort
ok = 1;
break;
}
++i;
}
}
++i;
}
// On recopie la sous-chaine comprise entre les indices de début et de fin dans la variable sous_chaine
sous_chaine = malloc( ( indice_fin - indice_debut) * sizeof( char ) );
strncpy( sous_chaine, chaine[indice_debut], indice_fin - indice_debut );
printf( "La sous-chaine trouvée est : %s", sous_chaine );
-------------------------------------------------------------------
je ne sais pas où ça s'interrompt. tiens je te renvoie encore une fois l'intégrale il y a d'autres (") à remplacé par des (') .
---------------------------------------------------------------
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
const int TAILLE_CHAINE_MAX = 255;
char debut[] = "bonjour";
char fin[] = "au revoir";
char chaine[TAILLE_CHAINE_MAX];
chaine[0] = -1; // Pour éviter que la valeur soit à 10 dès le départ, ce qui nous ferait sortir de la boucle
chaine[TAILLE_CHAINE_MAX-1] = '\0';
char * sous_chaine;
int i = 0;
int indice_debut, indice_fin;
int taille = strlen( debut );
int ok = 0;
printf( "Écrivez un texte de la forme : \nblablabla bonjour blablabla au revoir blablabla\n(Maximum %i caractères)\n", TAILLE_CHAINE_MAX );
// Tant que le caractère saisi n'est pas un saut de ligne et qu'on n'a pas atteint
// le nombre de caractères maximum, on lit et on enregistre dans le tableau.
for ( i=0 ; chaine[i] != 10 && i<TAILLE_CHAINE_MAX-1 ; ++i )
scanf("%c", &chaine[i]);
if ( i < TAILLE_CHAINE_MAX-1 )
chaine[i] = '\0';
i = 0;
while ( i < strlen( chaine ) && !ok ) {
printf( "Comparaison des chaines suivantes :\n'%s'\n'%s'\n\tTaille : %i\n", chaine[i], debut, taille );
// Si on trouve debut dans la chaine saisie
if ( strncmp( chaine[i], debut, taille ) == 0 ) {
i = i + taille;
indice_debut = i;
taille = strlen( fin );
// On cherche maintenant la chaine fin
while ( i < strlen( chaine ) - taille ) {
// Si on trouve la chaine fin...
if ( strncmp( chaine[i], fin, taille ) == 0 ) {
// ...on enregistre l'indice
indice_fin = i-1;
// ...on sort
ok = 1;
break;
}
++i;
}
}
++i;
}
// On recopie la sous-chaine comprise entre les indices de début et de fin dans la variable sous_chaine
sous_chaine = malloc( ( indice_fin - indice_debut) * sizeof( char ) );
strncpy( sous_chaine, chaine[indice_debut], indice_fin - indice_debut );
printf( "La sous-chaine trouvée est : %s", sous_chaine );
getchar();
return 0;
}
-------------------------------------------------------------------------
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
const int TAILLE_CHAINE_MAX = 255;
char debut[] = "bonjour";
char fin[] = "au revoir";
char chaine[TAILLE_CHAINE_MAX];
chaine[0] = -1; // Pour éviter que la valeur soit à 10 dès le départ, ce qui nous ferait sortir de la boucle
chaine[TAILLE_CHAINE_MAX-1] = '\0';
char * sous_chaine;
int i = 0;
int indice_debut, indice_fin;
int taille = strlen( debut );
int ok = 0;
printf( "Écrivez un texte de la forme : \nblablabla bonjour blablabla au revoir blablabla\n(Maximum %i caractères)\n", TAILLE_CHAINE_MAX );
// Tant que le caractère saisi n'est pas un saut de ligne et qu'on n'a pas atteint
// le nombre de caractères maximum, on lit et on enregistre dans le tableau.
for ( i=0 ; chaine[i] != 10 && i<TAILLE_CHAINE_MAX-1 ; ++i )
scanf("%c", &chaine[i]);
if ( i < TAILLE_CHAINE_MAX-1 )
chaine[i] = '\0';
i = 0;
while ( i < strlen( chaine ) && !ok ) {
printf( "Comparaison des chaines suivantes :\n'%s'\n'%s'\n\tTaille : %i\n", chaine[i], debut, taille );
// Si on trouve debut dans la chaine saisie
if ( strncmp( chaine[i], debut, taille ) == 0 ) {
i = i + taille;
indice_debut = i;
taille = strlen( fin );
// On cherche maintenant la chaine fin
while ( i < strlen( chaine ) - taille ) {
// Si on trouve la chaine fin...
if ( strncmp( chaine[i], fin, taille ) == 0 ) {
// ...on enregistre l'indice
indice_fin = i-1;
// ...on sort
ok = 1;
break;
}
++i;
}
}
++i;
}
// On recopie la sous-chaine comprise entre les indices de début et de fin dans la variable sous_chaine
sous_chaine = malloc( ( indice_fin - indice_debut) * sizeof( char ) );
strncpy( sous_chaine, chaine[indice_debut], indice_fin - indice_debut );
printf( "La sous-chaine trouvée est : %s", sous_chaine );
getchar();
return 0;
}
j'ai réessayé le programme même .. " absence" de résultat .
à quoi tu penses ?
je te recopie texto ce que je vois même si tu dois t'en douter evidémment :
0
1
2
3
ecrivez un texwte de la forme :
blablabla bonjour blablabla au revoir blablabla ( bon et pui le reste du texte, je peux saisir un texte que j'écri, et quand j'entre y'à rien qui se passe.
pour quoi elle ne se ferme pas . je ne vois pas .
- 1
- 2
- 3
- 4