Utlisation de la classe string

borgeomi Messages postés 77 Date d'inscription mercredi 20 juin 2001 Statut Membre Dernière intervention 23 juin 2011 - 31 janv. 2003 à 13:28
borgeomi Messages postés 77 Date d'inscription mercredi 20 juin 2001 Statut Membre Dernière intervention 23 juin 2011 - 31 janv. 2003 à 17:29
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

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
31 janv. 2003 à 15:13
-------------------------------
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...
0
cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 1
31 janv. 2003 à 16:11
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.
0
cs_vieuxLion Messages postés 455 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 6 avril 2004 8
31 janv. 2003 à 16:59
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
0
borgeomi Messages postés 77 Date d'inscription mercredi 20 juin 2001 Statut Membre Dernière intervention 23 juin 2011
31 janv. 2003 à 17:29
borgeomibonjouuuuuuur !!!!!
0
Rejoignez-nous