begin process at 2012 05 29 12:49:27
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Débutant(e)

 > 

mot se terminant par


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

mot se terminant par

dimanche 2 mai 2010 à 07:37:49 | mot se terminant par

naltap312

Bonjour,

tout novice et après moultes rélfexions, apparement pas assez, je n'arrive pas à coder une fonction me retournant si oui ou non un mot se termine par un mot.

voici mon code qui ne fonctionne pas ;)
Code C/C++ :
int main() {
	
	char *a = "Hello World!";
	char *b = strstr(a, "World!");

	int position = b - a;
	int lengtha = strlen(a);
	int lengthb = strlen(b);
	
	printf("the offset is %i\n", position);
	printf("length a = %d\n", lengtha);
	printf("length b = %d\n", lengthb);
	
	if(position>0 && a-b=a/2)
		printf("se termine bien par.\n");
	else
		printf("ne se termine pas par.\n");
		
	return 0;
	
}




Un peu d'aide est toujours bienvenue ;)
Merci
NaltaP312
dimanche 2 mai 2010 à 11:00:55 | Re : mot se terminant par

BruNews

Administrateur CodeS-SourceS
Pas testé mais devrait aller:
int SeTerminePar(char *a, char *b)
{
DWORD lmotif, lsrc;
int v;
lmotif = strlen(b);
lsrc = strlen(a);
if(lmotif > lsrc) return 0;
lsrc -= lmotif;
v = strcmp(a + lsrc, b);
return ((v == 0) ? 1: 0);
}

ciao...
BruNews, MVP VC++
dimanche 2 mai 2010 à 11:16:30 | Re : mot se terminant par

naltap312

Merci pour ce retour, mais il semble que cela ne fonctionne pas (je l'ai modifié pour du c "standard")
et si je change avec un motif n'étant pas dans le premier mot, j'ai un segmentation fault.

Par contre je pense que je vais jouer sur une fonction substring et une comparaison de mot.

Sinon voici le code retouché pour du c
Code C/C++ :
#include <stdio.h>
#include <string.h>


int SeTerminePar(char *a, char *b) { 

	unsigned long lmotif, lsrc; 

int v; 
lmotif = strlen(b); 
lsrc = strlen(a); 
if(lmotif > lsrc) return 0; 
lsrc -= lmotif; 
v = strcmp(a + lsrc, b); 
return ((v == 0) ? 1: 0); 
}

int main() {

	char *a = "Hello World!";
	char *b = strstr(a, "Coucou");
	printf("se termine par=%d\n", SeTerminePar(a,b));
}




Bon week end ;)
dimanche 2 mai 2010 à 11:18:21 | Re : mot se terminant par

CptPingu

Administrateur CodeS-SourceS
Réponse acceptée !
Je te propose deux méthodes:
La première est une correction de ce que tu as fait.
La deuxième est une version "fait main" (on peut sûrement faire mieux).

Code C/C++ :
#include <stdio.h>
#include <string.h>

int endWith(char* stack, char* needle)
{
  char* posStack = stack;
  char* posNeedle = needle;

  while (*stack)
    ++stack;
  while (*needle)
    ++needle;

  while (stack != posStack && needle != posNeedle)
  {
    if (*stack != *needle)
      return 0;
    --stack;
    --needle;
  }

  return needle == posNeedle;
}

int main(void)
{
  /* 1 */
  char* a = "Hello World!";
  char* b = strstr(a, "World!");
  int lengthword = strlen("World!");
  int length = 0;

  if (b == NULL)
    printf("ne se termine pas par.\n");

  length = strlen(b);

  if (lengthword == length)
    printf("se termine bien par.\n");
  else
    printf("ne se termine pas par.\n");

  /* 2 */

  if (endWith("Hello World!", "World!"))
    printf("se termine bien par.\n");
  else
    printf("ne se termine pas par.\n");

  return 0;
}


_____________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
dimanche 2 mai 2010 à 11:23:16 | Re : mot se terminant par

naltap312

Encore merci pour ce soutien.

Je viens juste de tester ce code.
c'est nickel pour le premier test.
Par contre si le mot est contenu mais pas à la fin, le deuxième test ne fonctionne pas.

Merci encore ;)
Code C/C++ :
#include <stdio.h>
#include <string.h>

int endWith(char* stack, char* needle)
{
  char* posStack = stack;
  char* posNeedle = needle;

  while (*stack)
    ++stack;
  while (*needle)
    ++needle;

  while (stack != posStack && needle != posNeedle)
  {
    if (*stack != *needle)
      return 0;
    --stack;
    --needle;
  }

  return needle == posNeedle;
}

int main(void)
{
  /* 1 */
  char* a = "Hello World! coucou";
  char* b = strstr(a, "World!");
  int lengthword = strlen("World!");
  int length = 0;

  if (b == NULL)
    printf("ne se termine pas par.\n");

  length = strlen(b);

  if (lengthword == length)
    printf("se termine bien par.\n");
  else
    printf("ne se termine pas par.\n");

  /* 2 */

  if (endWith(a, b))
    printf("se termine bien par.\n");
  else
    printf("ne se termine pas par.\n");

  return 0;
}



dimanche 2 mai 2010 à 11:27:06 | Re : mot se terminant par

CptPingu

Administrateur CodeS-SourceS

Par contre si le mot est contenu mais pas à la fin, le deuxième test ne fonctionne pas.


Si le mot est contenu mais pas à la fin, alors ta phrase ne finit pas par ce mot. C'est donc normal.
Regarde quand même la solution de Brunews, je n'ai pas cherché à faire quelque chose d'optimisé.

_____________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
dimanche 2 mai 2010 à 11:30:38 | Re : mot se terminant par

BruNews

Administrateur CodeS-SourceS
Le MOTIF !!! pas le résult de strstr()...

int main() {
printf("se termine par=%d\n", SeTerminePar("Hello World!", "World!"));
}

ciao...
BruNews, MVP VC++
dimanche 2 mai 2010 à 11:46:23 | Re : mot se terminant par

naltap312

ok merci, je vais suivre les conseils.

CommencePar est plus simple d'ailleurs à faire ;)
Bon week à tous
NaltaP312


Cette discussion est classée dans : code, int, mot, printf, termine


Répondre à ce message

Sujets en rapport avec ce message

Hachage fermé problème de lecture [ par mcflysupersonic ] Bonjour je suis nouveau sur le forum est ceci est ma première question donc j'espère que je ne me suis pas trompé d'endroit pour poster.Voilà j'ai un Demande d'explication a propos d'un code. [ par Strick9 ] Salut à tous, j'ai obtenu grâce à se merveilleux site ce code sources pour cet énoncés:un programme permettant de donner toute les combinaison suite a Windows plante {je sais pas nouveau } pour l'execution du mon code [ par darkwhite ] Salut a tous Je debute en C, et j'ai commencer a faire un petit programme. A la moitié de la creation je l'essaie mé windows me sort un message derreu Tableaux - Gestion dynamique de la mémoire [ par Smanyx ] Salut ! Je voudrais écrire un programme qui accepte des noms saisis au clavier et les amasse dans un tableau. Comme les noms sont entrés dans un bouc rectification dune code C et/ou aide sur l'algorithme [ par negets ] bonjour, besoin d'aide; j'aimerai dégager l'algorithme de ce code afin de le programmer sous matlab je connais plus rien en C et C++(je commence à lir motus en C [ par amine124 ] Bonjour, Je veux créer un petit jeu "motus" qui lit un mot et la comparer par le mot d'or (à trouver); si le joueur trouve qqes lettres, on les affi code source en C [ par lyna191 ] Bonsoir a tous , as que il y quelqu'un parmi vous qui peut m'explique ce code la (explication de la fonction Deplace) ? merci [code=cpp] int Deplac Problème générateur de grille de sudoku en C [ par Dovah ] Bonjour, je suis débutant en programmation, et pour m'entraîner j'ai décidé de créer un programme qui génère aléatoirement une grille de sudoku en C calculatrice matricielle avec boost::shared_array [ par mosaidrd ] le code ne genere aucune ereur mais il rencotre un problem d'assertion merci pour votre aide voici mon code : [code=cpp] //fichier Matrix.h #ifndef M


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,920 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales