/**
*
* @File : StrToUpper.cxx
*
* @Authors : D. Mathieu
*
* @Date : 06/03/2001
*
* @Version : V1.0
*
* @Synopsis : Test
*
*/
#include <iostream>
#include <string>
#include <fstream>
#include <vector>
#include <cstring> // toupper()
using namespace std;
namespace nsUtil
{
// Str doit être une donnée-résultat
void StrToUpper (string & Str)
{
for (string::size_type i (Str.size ()); i--; )
Str [i] = toupper (Str [i]);
} // StrToUpper()
void Essai_01 (void)
{
string S1 = "CouCou c'est Moi";
string S2;
StrToUpper (S1);
StrToUpper (S2);
cout << "S1 = " << S1 << endl;
cout << "S2 = " << S2 << endl;
} // Essai_01()
// Le profil de la fonction doit être le même que StrToUpper() pour
// permettre les mêmes opérations. Pour ne pas créer d'objet
// intermédiaire lors de l'exécution de l'instruction :
//
// return Str;
//
// il est nécessaire que la fonction renvoie une référence.
string & StrToUpper2 (string & Str)
{
for (string::size_type i (Str.size ()); i--; )
Str [i] = toupper (Str [i]);
return Str;
} // StrToUpper2()
void Essai_02 (void)
{
string S1 = "CouCou c'est Moi";
string S2 = StrToUpper2 (S1);
cout << "S2 = " << StrToUpper2 (S2) << endl;
cout << "S2 = " << StrToUpper2 (S2) << endl;
// string S3 = StrToUpper2 ("CouCou c'est Moi");
// Cette ligne ne devrait pas passer à la compilation car :
// - le paramètre formel de StrToUpper() est une donnée-résultat,
// - le paramètre effectif est une constante NTCTS, transformée
// en string par le compilateur
} // Essai_02()
} // namespace nsUtil
using namespace nsUtil;
int main (void)
{
/* */ Essai_01 (); /* */
/* */ Essai_02 (); /* */
return 0;
} // main()