Un petit pb de fonction en c++

Fermé
widi70 Messages postés 649 Date d'inscription jeudi 4 janvier 2007 Statut Membre Dernière intervention 22 juillet 2019 - 18 janv. 2007 à 10:44
mamiemando Messages postés 33113 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 15 mai 2024 - 25 janv. 2007 à 10:45
Bonjour tout le monde et bonne année à tous avec plein de bonheur!!!!!
J'ai un problème avec les fonctions je ne comprend pas comment ça marche.
je doit faire un programme qui me compte les caractères d'un texte je vois bien comment je doit faire mais je ne sait pas comment je doit l'ecrire. J'arrive pas à appeler ma fonction.
SVP aidez moi
merci d'avance

44 réponses

lirey83 Messages postés 75 Date d'inscription mardi 2 janvier 2007 Statut Membre Dernière intervention 18 août 2007 13
21 janv. 2007 à 12:45
Bon, je sais pas si c'est une bonne chose que de te macher tout le travail ... Enfin, c'est simple : tu te positionnes à l'emplacement souhaité dans ta phrase et tu remontes jusqu'à trouver un espace que tu remplaces par un saut de ligne. Et tu recommences la même chose jusqu'à la fin de la phrase :
  int deb, l;

  cout << "Entrer le nombre de caractere que vous voulez pour une ligne :" ;
  cin >> l;

  deb = 0;
  i = l;
  while (i < len)
  {
    while ((i>deb) && (text[i] != ' ')) i--;

    if (i>deb)
    {
      text[i]=10;
      deb = i;
      i += l;
    }
  }

  std::cout << "phrase découpé = " << std::endl << text << std::endl;
1
widi70 Messages postés 649 Date d'inscription jeudi 4 janvier 2007 Statut Membre Dernière intervention 22 juillet 2019 65
21 janv. 2007 à 15:27
dit tu peut m'expliquer à quoi il sert le deb enfin ce qu'il represente
0
lirey83 Messages postés 75 Date d'inscription mardi 2 janvier 2007 Statut Membre Dernière intervention 18 août 2007 13
21 janv. 2007 à 20:19
deb représente l'indice du caractère qui sera au début de chaque (nouvelle) ligne. Au début il vaut 0 puis il vaudra i, c'est-à-dire là ou on à placer le retour à la ligne.
0
widi70 Messages postés 649 Date d'inscription jeudi 4 janvier 2007 Statut Membre Dernière intervention 22 juillet 2019 65
18 janv. 2007 à 13:10
apperement il fo que j'utilise la fonction strlen mais je c pas comment je doit faire
SVP aidez moi
0
lirey83 Messages postés 75 Date d'inscription mardi 2 janvier 2007 Statut Membre Dernière intervention 18 août 2007 13
18 janv. 2007 à 16:36
Salut

Montres nous déjà ce que tu as écrit et on pourra t'aider !
0
widi70 Messages postés 649 Date d'inscription jeudi 4 janvier 2007 Statut Membre Dernière intervention 22 juillet 2019 65
18 janv. 2007 à 17:49
j'ai fait ça mais j'ai une erreur et je voit pas d'ou el vient?

#include <iostream>
#include <string>

using namespace std;

string texte;
int len;

cout << "Veuillez entrer votre texte." << endl;
cin >> texte;
cout << "Le nombre de caractères est:" << texte.size() << endl;
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
widi70 Messages postés 649 Date d'inscription jeudi 4 janvier 2007 Statut Membre Dernière intervention 22 juillet 2019 65
18 janv. 2007 à 18:05
ah ben enfaite j'ai trouver ce qui va pas voila le resultat:

*/Compter les caractères */

#include <iostream>
#include <string> */ bibliothèque pour la fonction len*/

using namespace std;
main {

string texte;
int len = texte.size();

cout << "Veuillez entrer votre texte." << endl;
cin >> texte;

cout << "Le nombre de caractères est:" << len << endl;

}

mais si qqn pourrai me donner un coup de main pour faire un programme qui calcul le nombre de mot se serait vraiment gentille
je ne sais vraiment pas comment faire
0
widi70 Messages postés 649 Date d'inscription jeudi 4 janvier 2007 Statut Membre Dernière intervention 22 juillet 2019 65
18 janv. 2007 à 19:07
ben enfaite mon programme il marche qu'a moitié
si j'ecrit Bonour tout le monde il va afficher 7 il compte que Bonjour.
Donc si qqn pourrait me donner une autre solution ou expliquer comment faire pour faire un programme avec des bouble (enfaite je ne voit pas quand je doit incrementer mon compteur)
merci d'avance
0
lirey83 Messages postés 75 Date d'inscription mardi 2 janvier 2007 Statut Membre Dernière intervention 18 août 2007 13
18 janv. 2007 à 20:33
cin semble supprimer les espaces ... essayes comme ça :
int main() {

char texte[50];

cout << "Veuillez entrer votre texte." << endl;
cin.getline(texte,50);

int len = strlen(texte);

cout << "Le nombre de caractères est : " << len << endl;
}
0
widi70 Messages postés 649 Date d'inscription jeudi 4 janvier 2007 Statut Membre Dernière intervention 22 juillet 2019 65
18 janv. 2007 à 20:40
oui mais si le nombre de caractère est superieur à 50 ça marche plus si???,
et moi il fau que ça marche pour un nbr inconnu de caractere
0
lirey83 Messages postés 75 Date d'inscription mardi 2 janvier 2007 Statut Membre Dernière intervention 18 août 2007 13
18 janv. 2007 à 23:44
Effectivement, si la chaine est supérieur à 50, on a un problème. Mais Google est ton ami, une simple recherche sur les mots cin, espace et c++ te conduit à la page suivante :
http://fr.wikibooks.org/wiki/Programmation_C++_(d%C3%A9butant)/La_classe_string

qui répond à la question, donc le code correct est :
int main()
{
  string texte;

  cout << "Veuillez entrer votre texte." << endl;
  getline(cin,texte);

  int len = texte.length();

  cout << "Le nombre de caractères est : " << len << endl;
}
0
mamiemando Messages postés 33113 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 15 mai 2024 7 753 > lirey83 Messages postés 75 Date d'inscription mardi 2 janvier 2007 Statut Membre Dernière intervention 18 août 2007
19 janv. 2007 à 02:03
C'est pas comme si c'était déjà écrit juste en dessous...
0
lirey83 Messages postés 75 Date d'inscription mardi 2 janvier 2007 Statut Membre Dernière intervention 18 août 2007 13 > lirey83 Messages postés 75 Date d'inscription mardi 2 janvier 2007 Statut Membre Dernière intervention 18 août 2007
19 janv. 2007 à 10:04
Heu, je sais pas comment interpréter ton commentaire. Mais une chose est sure, ton code ne marche pas :
L'utilisation de "std::cin >> text;" pour récupérer une phrase complète ne marche pas (et donc la valeur que tu stockes dans len est fausse), il faut utiliser "getline(cin,text);"
cf le lien que j'ai donné plus haut.
0
mamiemando Messages postés 33113 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 15 mai 2024 7 753
18 janv. 2007 à 21:03
#include <iostream>
#include <string>

extern "C"{
 #include <ctype.h>
}

int main(){
  // Lecture
  std::string text;
  std::cout << "texte ?";
  std::cin >> text;

  // Nombre de caracteres
  std::size_t len =  text.length() 
  std::cout << "nombre de caractères = " << len << std::endl;

  // Nombre de mots
  unsigned int nb_words=0;
  for(unsigned int i=0;i<len;++i){
    // avancer jusqu'au prochain mot
    while(!isalpha(text[i] && i<len) ++i;

    // on a atteint la fin de la chaine
    if(i>=len) break;

    // on a atteint un nouveau mot
    // avancer jusqu'à la fin du mot
    ++nb_words;
    while(isalpha(text[i] && i<len) ++i;
  }
  std::cout << "nombre de mots = " << nb_words<< std::endl;
  return 0;
}

Ou truc dans le genre... Là j'ai pas de compilateur sous la main...

Bonne chance
0
widi70 Messages postés 649 Date d'inscription jeudi 4 janvier 2007 Statut Membre Dernière intervention 22 juillet 2019 65
19 janv. 2007 à 08:47
merci bcp tout le monde pour votre aide mamiemando tu pourrais m'expliquer ça sert à quoi :
extern "C"{
#include <ctype.h>

merci bcp
0
mamiemando Messages postés 33113 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 15 mai 2024 7 753
19 janv. 2007 à 10:05
En C++, quand tu inclues header "C" il faut rajouter ça autour car sinon ça peut déconner avec certains compilateurs.

Bonne chance
0
widi70 Messages postés 649 Date d'inscription jeudi 4 janvier 2007 Statut Membre Dernière intervention 22 juillet 2019 65
19 janv. 2007 à 10:41
ok merci bcp
0
widi70 Messages postés 649 Date d'inscription jeudi 4 janvier 2007 Statut Membre Dernière intervention 22 juillet 2019 65
19 janv. 2007 à 10:59
ah gros probleme je n'ai pas le droit d'utiliser des fonctions toutes faites donc voila tout mon travail est foutu.
pour les caractere je fait comment, je ne sais pas quand je doit incrementé le compteur.
tant que car = toutes les lettres espaces etc, etc. Je peut ecrire ça comment????
et pour les mots je peu faire un truc comme ça:
#include <iostream>
using namespace std;
int main{

int nb-mots;
int mots;
char texte;
cout<<"votre texte"<<endl;
cin>>texte;
nb-mots=0;
mots=0;
while (mots!='/n'){
if mots = ' '{
nb-mots=nb-mots+1;
}
else
mot=mot+1;
}
cout<<"il y a "<<nb-mots<<"mots"<<endl;
}
mais ça ne marche pas donc si vous pouvez m'aidez
merci encore bcp de votre aide
0
lirey83 Messages postés 75 Date d'inscription mardi 2 janvier 2007 Statut Membre Dernière intervention 18 août 2007 13
19 janv. 2007 à 11:00
je corrige le code de mamiemando :

int main()
{
  // Lecture
  std::string text;
  std::cout << "texte ?";
  getline(cin,text);

  // Nombre de caracteres
  std::size_t len =  text.length();
  std::cout << "nombre de caractères = " << len << std::endl;

  // Nombre de mots
  unsigned int nb_words=0;
  for(unsigned int i=0;i<len;i++)
  {
    // avancer jusqu'au prochain mot
    while ((isalpha(text[i]) && i<len)) i++;

    // on a atteint la fin d'un mot ou de la chaine
    if (i<=len) nb_words++;
  }
  std::cout << "nombre de mots = " << nb_words<< std::endl;

  return 0;
}
0
widi70 Messages postés 649 Date d'inscription jeudi 4 janvier 2007 Statut Membre Dernière intervention 22 juillet 2019 65
19 janv. 2007 à 11:04
oui mais je n'ai pas le droit d'utiliser len
0
lirey83 Messages postés 75 Date d'inscription mardi 2 janvier 2007 Statut Membre Dernière intervention 18 août 2007 13
19 janv. 2007 à 11:10
Crées toi tes propres fonctions :

bool my_isalpha(char lettre)
{
  return (((lettre >= 'A') && (lettre <= 'Z')) || ((lettre >= 'a') && (lettre <= 'z')));
}

int my_length(string phrase)
{
  int i=0;
  while (phrase[i] != 0) i++;
  return i;
}
0
widi70 Messages postés 649 Date d'inscription jeudi 4 janvier 2007 Statut Membre Dernière intervention 22 juillet 2019 65
19 janv. 2007 à 11:15
on peut pas faire un truc avec des boucles while if.....
0
lirey83 Messages postés 75 Date d'inscription mardi 2 janvier 2007 Statut Membre Dernière intervention 18 août 2007 13
19 janv. 2007 à 11:18
ben c'est justement ce que font ses fonctions ! Si t'aime pas les fonctions intègres les directement dans le code de Mamiemando qui marche très bien !
0
widi70 Messages postés 649 Date d'inscription jeudi 4 janvier 2007 Statut Membre Dernière intervention 22 juillet 2019 65
19 janv. 2007 à 11:25
et je met quand même
extern "C"{
#include <ctype.h>
car je voit pas comment l'expliquer clairement en un commentaire simple
0
widi70 Messages postés 649 Date d'inscription jeudi 4 janvier 2007 Statut Membre Dernière intervention 22 juillet 2019 65
19 janv. 2007 à 13:36
merci bcp de toute votre aide, le programme fonctionne correctement mais pour compter les mots si j'ecrit
bonjour tout le monde. ca va bien? il compte 8 il compte le ? comme un mot. Je doit modifier quoi dans le programme pour qu'il ne compte pas comme un mot le ? , ; : !

Et sinon je voudrait qu'a un nombre de caractere donné on reécrit le texte et à x caractere on met un retour à la ligne .
j'ai fait ça:

#include <iostream>
#include <string>

int main()
{
// Lecture
string text;
int l;
cout << "texte ?";
getline(cin,text);
cout<<"Entrer le nombre de caractere que vous voulez pour une ligne?<<endl;
cin>>l;

// Nombre de caracteres
size_t len = text.length();
cout << "nombre de caractères = " << len <<endl;

// Nombre de mots
unsigned int nb_words=0;
for(unsigned int i=0;i<len;i++)
{
// avancer jusqu'au prochain mot
while ((isalpha(text[i]) && i<len)) i++;

// on a atteint la fin d'un mot ou de la chaine
if (i<=len) nb_words++;
}
cout << "nombre de mots = " << nb_words<<endl;

return 0;
if (len>l){
cout<<len=0;len<l;len ++<<endl;
}
else
cout<<size_t len<<endl;
}

mais ça ne fonctionne pas si vous pouvez me donner un peit coup de main.
0