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
- Un mot est caché dans l’en-tête du document. pour le trouver, modifiez sa couleur. - Forum Word
- Un mot est caché dans l'en-tête du document. pour le trouver, modifiez sa couleur. ✓ - Forum Word
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.