Utlisation de la classe string

Signaler
Messages postés
77
Date d'inscription
mercredi 20 juin 2001
Statut
Membre
Dernière intervention
23 juin 2011
-
Messages postés
77
Date d'inscription
mercredi 20 juin 2001
Statut
Membre
Dernière intervention
23 juin 2011
-
borgeomibonjouuuuuuur !!!!!

nouveau programmeur en C ++ ( mais vieux en cobol )

sous visual C++

création d'une fonction qui enlève les espaces de début et de fin de chaîne et les remplace par des ; ( pour traitement access)

//*******************************************************************************************
// fonction de traitement des espaces en début et en fin de chaine
//*******************************************************************************************

string * fonction_remplace_space ( char *zone_recue , int numero_transmis )
{
cout << "zone_recue ==> "<< zone_recue << endl ;
char *jetonptr_zone_recue;
jetonptr_zone_recue = strtok ( zone_recue , "|");
int numero_de_jeton_zone_recue = 1;
string zone_renvoyee ( ";" );
while ( jetonptr_zone_recue != NULL )
{
cout << "jetonptr_zone_recue ==> " << numero_de_jeton_zone_recue << "==>" << jetonptr_zone_recue << endl ;
jetonptr_zone_recue = strtok ( NULL , "|");
numero_de_jeton_zone_recue = numero_de_jeton_zone_recue + 1;
// iniialisation zone hippodrome
if ( numero_de_jeton_zone_recue = numero_transmis )
{
zone_renvoyee += jetonptr_zone_recue;
zone_renvoyee+= ";" ;
cout << " zone_renvoyee ==> avant " << zone_renvoyee << endl ;
// afficher la chaîne caractère par caractère
int j = 0;
int x = zone_renvoyee.find ( "; ") ;
while ( x < string::npos )
{
zone_renvoyee.replace ( x,2,";" );
x = zone_renvoyee.find ( "; ", x + 1 ) ;
}
cout << " zone_renvoyee ==> apres " << zone_renvoyee << endl ;
int z = zone_renvoyee.rfind ( " ;") ;
while ( z < string::npos )
{
zone_renvoyee.replace ( z,2,";" );
z = zone_renvoyee.rfind ( " ;", z - 1 ) ;
}
cout << " zone_renvoyee ==> apres2 " << zone_renvoyee << endl ;

}
}
// retour zone string

return zone_renvoyee;

}

NB ==> A la compile message ==>

c:\program files\microsoft visual studio\myprojects\projet\projet1.cpp(451) : error C2440: 'return' : cannot convert from 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' to 'class std::basic_string<char,stru
ct std::char_traits<char>,class std::allocator<char> > *'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
Error executing cl.exe.

projet.exe - 1 error(s), 0 warning(s)

Merci d'avance de vos réponses ( NB je ne retourne pas sur COBOL )

4 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
-------------------------------
Réponse au message :
-------------------------------

> borgeomibonjouuuuuuur !!!!!
>
> nouveau programmeur en C ++ ( mais vieux en cobol )
>
> sous visual C++
>
> création d'une fonction qui enlève les espaces de début et de fin de chaîne et les remplace par des ; ( pour traitement access)
>
> //*******************************************************************************************
> // fonction de traitement des espaces en début et en fin de chaine
> //*******************************************************************************************
>
>
> string * fonction_remplace_space ( char *zone_recue , int numero_transmis )
> {
> cout << "zone_recue ==> "<< zone_recue << endl ;
> char *jetonptr_zone_recue;
> jetonptr_zone_recue = strtok ( zone_recue , "|");
> int numero_de_jeton_zone_recue = 1;
> string zone_renvoyee ( ";" );
> while ( jetonptr_zone_recue != NULL )
> {
> cout << "jetonptr_zone_recue ==> " << numero_de_jeton_zone_recue << "==>" << jetonptr_zone_recue << endl ;
> jetonptr_zone_recue = strtok ( NULL , "|");
> numero_de_jeton_zone_recue = numero_de_jeton_zone_recue + 1;
> // iniialisation zone hippodrome
> if ( numero_de_jeton_zone_recue = numero_transmis )
> {
> zone_renvoyee += jetonptr_zone_recue;
> zone_renvoyee+= ";" ;
> cout << " zone_renvoyee ==> avant " << zone_renvoyee << endl ;
> // afficher la chaîne caractère par caractère
> int j = 0;
> int x = zone_renvoyee.find ( "; ") ;
> while ( x < string::npos )
> {
> zone_renvoyee.replace ( x,2,";" );
> x = zone_renvoyee.find ( "; ", x + 1 ) ;
> }
> cout << " zone_renvoyee ==> apres " << zone_renvoyee << endl ;
> int z = zone_renvoyee.rfind ( " ;") ;
> while ( z < string::npos )
> {
> zone_renvoyee.replace ( z,2,";" );
> z = zone_renvoyee.rfind ( " ;", z - 1 ) ;
> }
> cout << " zone_renvoyee ==> apres2 " << zone_renvoyee << endl ;
>
> }
> }
> // retour zone string
>
> return zone_renvoyee;
>
> }
>
>
>
>
> NB ==> A la compile message ==>
>
> c:\program files\microsoft visual studio\myprojects\projet\projet1.cpp(451) : error C2440: 'return' : cannot convert from 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' to 'class std::basic_string<char,stru
> ct std::char_traits<char>,class std::allocator<char> > *'
> No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
> Error executing cl.exe.
>
> projet.exe - 1 error(s), 0 warning(s)
>
>
> Merci d'avance de vos réponses ( NB je ne retourne pas sur COBOL )
Salut,
je sais pas ou est l'erreur mais si tu programmais avant en cobol, fais tes traitements de chaine en C sans std et autre bidule du genre et surtout passe directement en prog grahique. Je le fais et je le publie pour ce soir.
ciao...
Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006

C'est un problème très facile à résoudre. Modifies le prototype de ta fonction en:

string fonction_remplace_space ( char *zone_recue , int numero_transmis );

Utilises ta fonction comme ceci:
string res=fonction_remplace_space(...);

Le mécanisme utilisé ici est celui du constructeur de copie ou clonage d'objet.
Messages postés
455
Date d'inscription
samedi 26 octobre 2002
Statut
Membre
Dernière intervention
6 avril 2004
8
réponse pour borgeomi
il y a beaucoup d'erreurs dans ton source... c'est normal il faut beaucoup de temps pour apprivoiser tout ça !

je te conseille la solution suivante : utilise les fonctions déja faites : par exemple parmi les deux suivantes :

#include
#include <string>
#include
using namespace std;
int main()
{
string str("aa|bb|cc");
cout << "str=" << str << endl;
//avec la méthode replace de la classe string
int pos=0;
while ( (pos=str.find("|",0)) != string::npos ) //tant qu'on trouve des "|"
str.replace(pos, 1, ";");//le remplace
cout << "apres remplacement : " << str << endl;
string str2("dd|ee|ff");
cout << "str2=" << str2 << endl;
//avec l'algorithme replace:
replace(str2.begin(), str2.end(), '|', ';');//les remplace tous
cout << "apres remplacement : " << str2 << endl;
return 0;
}

encore un mot :
la plus grosse faute de ta solution est de chercher à renvoyer renvoyer un type "string" alors que tu déclares un "string*"
de plus, renvoyer un pointeur sur une variable locale est très grave...

Bon courage
Messages postés
77
Date d'inscription
mercredi 20 juin 2001
Statut
Membre
Dernière intervention
23 juin 2011

borgeomibonjouuuuuuur !!!!!