begin process at 2012 02 11 05:47:04
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Algorithme

 > 

Maths

 > 

Problème pour compter un nombre de lettres


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

Problème pour compter un nombre de lettres

dimanche 11 janvier 2009 à 17:04:43 | Problème pour compter un nombre de lettres

Schlaf

Bonjour,
alors voila je doit rédiger un script , voici l'énoncé:
(tableau a 1 dimension):Écrire le script qui permet de saisir un mot et qui permet de dire si le mot saisi est un palindrome (c'est un mot qui se lit de la même façon dans les 2 sens exemple:"ressasser","elle","radar").

Pour cela j'ai l'intention d'écrire le mot dans un tableau, de calculer la taille du mot,de calculer la lettre centrale, d'utiliser 2 "pour" : 1 qui part du début jusqu'au milieu et un autre qui part de la fin vers le milieu, puis comparer si ces lettres sont égales jusqu'au bout.
Est ce la bonne solution?
J'ai un problème ce que je ne sais pas compter la taille du mot.
Voici le début de mon script:

#include <iostream.h>
#include <stdlib.h>
#include<CSTDIO>

int main()
{

//Déclaration des variables

const int max=20;
char tab[max];
int cpt,i,j;

//Saisie du mot

cout<<"Veuillez saisir un mot : ";
gets(tab);

//Comptage du nombre de lettres

cpt=0;
for (i=0;i<max;i=i+1)
{
  while (tab[i]!='\0')
  {
  cpt=cpt+1;
  }
}
cout<<cpt<<endl;

      system("PAUSE");
      return 0;
}

L'exécutable ne me renvoie rien après la saisie du mot. Ce n'est pas la bonne manière?
Merci
dimanche 11 janvier 2009 à 17:49:28 | Re : Problème pour compter un nombre de lettres

Neo_Fr

Membre Club
Salut,
Essaye ca:

#include <windows.h>
#include <stdio.h>

int main(void)
{
    DWORD dwLen;
    LPSTR lptr;
    char szTab[32];

    //Saisie du mot
    printf("Veuillez saisir un mot : ");
    gets(szTab);

    //Comptage du nombre de lettres
    lptr = szTab;
    while(*lptr++);
    dwLen = (lptr - szTab);
    printf("\n%i", dwLen);

    system("PAUSE");
    return 0;
}

sinon tu peux aussi utiliser strlen:
dwLen = strlen(szTab);

Neo_Fr
dimanche 11 janvier 2009 à 18:02:15 | Re : Problème pour compter un nombre de lettres

ed73

Bonjour,

Il suffit d'inverser la chaine. Si la chaine inversée est égale à la chaine saisie alors c'est un palindrome. La fonction strrev inverse une chaine.

int main(void)

    char szTab[32],szTabRev[32];

    //Saisie du mot
    printf("Veuillez saisir un mot : ");
    gets(szTab); 

   strcpy(szTabRev,szTab);
   strrev(szTabRev);

   if(!strcmp(szTab,szTabRev))
      printf("C'est un palindrome\n");
   else printf("Ce n'est pas un palindrome\n");

    system("PAUSE");
    return 0;
}

facile non ?

ed73

 

 

dimanche 11 janvier 2009 à 18:09:33 | Re : Problème pour compter un nombre de lettres

uaip

Beaucop plus simple strlen(), ouai.
Mais moi je ne suis pas d'accord sur l'algo.
J'ai peut-être tord mais je trouve que c'est une perte de temps que de compter la taille du mot puis exécuter 2 boucles for().
Je ferais comme ceci :
int taille=strlen(mot)-1;
bool verif=true; //on considère que le mot est un palindrome
int a=0;
while ((a++ <= taille) && (verif)) {
if (mot[a] != mot[taille-a]) verif=false;
}

Si verif = true alors le mot est un palindrome, sinon non.
On peut aller encore plus rapidement en arrêtant la boucle à la moitié du mot, mais ça change en fonctione du nombre (pair ou impair) de lettres.
Code testé et il fonctionne.

Cordialement, uaip.
dimanche 11 janvier 2009 à 18:12:10 | Re : Problème pour compter un nombre de lettres

uaip

Arf, le temps d'écrire et de tester, ed73 m'a devandé ^^
Si je peux faire des commentaires à vos réponses : on est en C++ et non en C donc le printf(); ...
Remarque le strlen() est du C aussi, je crois. Aurait-on tous faux ?

Cordialement, uaip.
dimanche 11 janvier 2009 à 19:35:10 | Re : Problème pour compter un nombre de lettres

BruNews

Administrateur CodeS-SourceS

Pas besoin de strlen() ni de recopie inversée.

Version simple, pur palindrome:
int EstPalindrome(char *psz)
{
  char *c, *d;
  c = d = psz;
  while(*d) d++;
  d--; // SUR DERNIER CHAR
  while(c < d) {
    if(*c != *d) return 0; // NON PALINDROME
    c++;
    d--;
  }
  return 1;
}


Version ne tenant pas compte d'éventuels espaces dans les mots:
int EstPalindrome(char *psz)
{
  char *c, *d;
  c = d = psz;
  while(*d) d++;
  d--; // SUR DERNIER CHAR
  while(c < d) {
    while(*d == 32) d--; // SAUTE ESPACES
    if(c >= d) break; // OK
    while(*c == 32) c++; // SAUTE ESPACES
    if(c >= d) break; // OK
    if(*c != *d) return 0; // NON PALINDROME
    c++;
    d--;
  }
  return 1;
}

déjà mis sur le forum plusieurs fois, il ne faut pas hésiter à chercher.

ciao...
BruNews, MVP VC++

lundi 12 janvier 2009 à 19:22:05 | Re : Problème pour compter un nombre de lettres

Schlaf

Merci pour vos réponses
Ça marche


Cette discussion est classée dans : problème, nombre, mot, compter, lettres


Répondre à ce message

Sujets en rapport avec ce message

Problème Urgent! [ par Tibnowhere1 ] Déjà bonjour tout le monde. Je suis en projet sur le jeu de lettres Motus,et j'ai un souci sur un point.Je souhaite ouvrir un dictionnaire de mots, pr Chiffre ou lettre ? [ par ralebole ] Bonjour a tousJe voudrais savoir comment faire pour savoir si c'est un nombre ou une chaine des lettresExemple char petibuf[10];la personne rentre nor problème avec rand() [ par ganner ] BonsoirJ'utilise cette boucle dans mon programme pour pouvoir obtenir un nombre aléatoire:while (nbRand 400)    {        nbRand = cherche un mot avec un certain nbr de lettres dans un .txt [ par hichame101 ] voila je suis debutant et j ai un projet " tap vite". le probleme que j ai, c est que je sais pas commenct faire pour chercher dans un fichier texte ( compter le nombre d impression [ par magaspaill ] bonjourj aurai voulu savoir comment compter le nombre d impressions faites sous une session windows et pouvoir récupérer ce nombremerci pour vos repon problème avec isdigit [ par deck_bsd ] Voila j'ai un petit problème je voudrai faire en sorte que lors d'une insertion de nombre on recommence le code jusqu'à ce que le nombre soit un nombr Compter le nombre de handle [ par chuckboy ] Je fais un petit programme qui tests la stabilité d'un système.Je voudrais savoir comment avoir le nombre de handle utilisé par un programme ou une ta Probleme avec la librairie <conio.h> et avec le type "float" en c++ [ par Rigel Io ] Salut, j'aurai besoin de vos conseils éclairé en c++. Je suis débutant et j'apprends encore sur les tutorials possible de trouver sur Internet, je pro convertir les nombres en lettres [ par djamine ] salut les amisje cherche un code pour convertir les nombres (1 2 3 .....) en lettres ( un, deux , trois....)l'utilisateur donne le nombre et le progra Comment compter le nombre d'espaces [ par xabi62 ] Je voudrais savoir comment il faut faire pour compter le nombre de mots dans une phrase, je pense qu'en comptant le nombre d'espace, on doit pouvoir l


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
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 : 1,638 sec (3)

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