erreur de segmentation sur string

erreur de segmentation sur string - C++ - Programmation

Marsh Posté le 17-11-2005 à 22:28:57    

Bonjour, :hello:
 
J'ai un petit problème avec ce petit programme qui supprime les voyelles d'une chaine et conservant la première lettre qu'elle qu'elle soit.
Si je n'initialise pas la string convert avec suffisament d'espaces pour contenir le résultat j'ai un erreur de segmentation (pas à la compilation mais à l'utilisation).
Avez vous une solution pour ne pas avoir à initialiser convert ?
Merci.
 
N.B je doit utiliser une boucle     for (unsigned i=1; i<chaine.size();++i)
 

Citation :


#include <iostream>
#include <string>
 
using std::cout;
using std::endl;
using std::string;
 
int main ()
{
    string chaine="Jedoisretirerlesvoyellesdecettechaine";
    string  convert="                                       ";
    int j=1;
    convert[0]=chaine[0];
    for (unsigned i=1; i<chaine.size();++i)
    {
        if (chaine[i]!='a' && chaine[i]!='e' && chaine[i]!='i' && chaine[i]!='o' && chaine[i]!='u' && chaine[i]!='y' )
        {
            convert[j]=chaine[i];
            j++;
        }
    }
 
cout<<"Chaine de base : "<<chaine<<"\nSans voyelles : "<<convert<<endl;
return 0;
}


 
 
Autre question
Imaginons que l'on a une fonction dans un fichier séparé qui prend un argument de type chaîne de caractères, a qui on peut passer, indifféremment, un litéral chaîne (ex. "hello" ), un argument de la ligne de commande (type : char const *) ou une variable de type std::string.
Quels argumments mettre dans le .h et dans le cpp?
Merci encore ...

Reply

Marsh Posté le 17-11-2005 à 22:28:57   

Reply

Marsh Posté le 17-11-2005 à 23:21:21    

une autre solution, tu es toujours obligé d'initialiser convert

Code :
  1. #include <iostream>
  2. #include <string>
  3. #include <algorithm>
  4. using std::cout;
  5. using std::endl;
  6. using std::string;
  7. using std::remove_copy_if;
  8. bool
  9. voyelle (const char& _char)
  10. {
  11.   return _char=='a'
  12.        || _char=='e'
  13.        || _char=='i'
  14.        || _char=='o'
  15.        || _char=='u'
  16.        || _char=='y';
  17. }
  18. int main ()
  19. {
  20.   string chaine="Jedoisretirerlesvoyellesdecettechaine";
  21.   string  convert(chaine);
  22.   convert.erase(remove_copy_if(chaine.begin() + 1, chaine.end(), convert.begin() + 1, voyelle)
  23.                       , convert.end());
  24.   cout << "Chaine de base : " << chaine
  25.          << "\nSans voyelles : " << convert << endl;
  26.   return 0;
  27. }

Reply

Marsh Posté le 18-11-2005 à 08:55:59    

Merci de ton aide mais je dois m'en tenir aux méthodes vues en cours je pense ...
Donc sans  #include <algorithm> ou convert(chaine);

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed