Bonsoir

Avec la STL pas de fonction directe pour convertir une "string" en majuscules ou en minuscules.

Certes l' alphabet occidental ne représente pas , ce dont on parle dans le monde...

Mais venons en au faît de traduire tantôt minuscule , majuscule et voiçi ma première approche :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
 
#include <iostream>
#include <string>
 
using namespace std ;
 
short  char_lower( char c )
{ return tolower(c) ; }
 
short  char_upper( char c )
{ return (short) toupper(c) ; }
 
void str_upper( char&  c )
{ c = (char) toupper(c) ; }
 
void str_lower( char&  c )
{ c = (char) tolower(c) ; }
 
 
void  do1(void)
{ string z;
  char buf[512] ;
  cin.getline( buf, 255, '\n')  ;
  z = buf ;
  cout << z << endl;
  for_each( z.begin(), z.end(), str_upper ) ;
  cout << "for_each upper= " << z << endl ;
  for_each( z.begin(), z.end(), str_lower ) ;
  cout << "for_each lower= " << z << endl ;
  transform( z.begin(), z.end(), z.begin(), char_lower ) ;
  cout << "Transform Lower " << endl ;
  cout << z << endl ;
  transform( z.begin(), z.end(), z.begin(), char_upper ) ;
  cout << "Transform Upper" << endl ;
  cout << z << endl ;
}
 
#pragma argsused
int main( int argc , char * argv [] )
{ do1();
  return 0;
}
J' ai pensé que pour faire la conversion majuscule minuscule ou l' inverse il ne nécéssitait que deux fonctions :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
void str_to_upper( string& z  )
{ for( size_t i = 0 ; i < z.length() ; i++ )
  z[ i ] = toupper(z[ i ]  ) ;
}
 
void str_to_lower( string& z )
{ for ( size_t i = 0 ; i < z.length() ; i++ )
  z[ i ] = tolower( z[ i  ] ) ;
}
Q' en pensez-vous ?
On pourrait faire mieux en faisant en sorte que "str_to_lower" et "str_to_upper" renvoient la chaîne ainsi passée en référence ?

Cordialement.