Un truc tout bête et pourtant casse tête
Résolu
jeun's
-
EL barto ! -
EL barto ! -
Bonjour,
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 ?
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 ?
A voir également:
- Un truc tout bête et pourtant casse tête
- Un pense-bête - Guide
- Tête de parabole défectueuse - Forum TV & Vidéo
- L'en-tête du document comporte une information qui n’apparaît pas à l'impression car elle est de couleur blanche. de quelle information s'agit-il ? ✓ - Forum Bureautique
- Réparation écran tv samsung cassé ✓ - Forum Téléviseurs
- Écran ordinateur cassé sans choc - Forum Ecran
63 réponses
Essaie de modifier comme suit et donne moi le résultat de l'affichage stp :
Rentre le texte bonjour coucou au revoir.
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; }
Rentre le texte bonjour coucou au revoir.
#include <windows.h> #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { printf( "0\n" ); const int TAILLE_CHAINE_MAX = 255; char debut[] = "bonjour"; char fin[] = "au revoir"; char chaine[TAILLE_CHAINE_MAX]; printf( "1\n" ); 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; printf( "2\n" ); int i = 0; int indice_debut, indice_fin; int taille = strlen( debut ); int ok = 0; printf( "3\n" ); 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]); } printf( "4\n" ); if ( i < TAILLE_CHAINE_MAX-1 ) { chaine[i] = '\0'; } printf( "5\n" ); 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; } printf( "6\n" ); // 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( "7\n" ); printf( "La sous-chaine trouvée est : %s", sous_chaine ); getchar(); return 0; }
Essaie ça et dis moi quel est le dernier chiffre affiché.
char v[8] = 'bonjour';
le compilateur s'arrête, et indique
[ warning] caractere constant too long for its type
C'est apparemment pas le bon type. non ?
Les simples quotes ( ' ) sont utilisés pour les caractères simples, pas pour les chaines de caractères.