J'ai besoin de convertir une chaîne en C++ en majuscules complètes. Je cherche depuis un moment et j'ai trouvé un moyen de le faire:
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main()
{
string input;
cin >> input;
transform(input.begin(), input.end(), input.begin(), toupper);
cout << input;
return 0;
}
Malheureusement, cela n'a pas fonctionné et j'ai reçu ce message d'erreur:
pas de fonction correspondante pour l'appel à 'transform (std :: basic_string :: iterator, std :: basic_string :: iterator, std :: basic_string :: iterator,
J'ai essayé d'autres méthodes qui ne fonctionnaient pas non plus. C'était le plus proche de travailler.
Donc ce que je demande, c'est ce que je fais mal. Peut-être que ma syntaxe est mauvaise ou que je dois inclure quelque chose. Je ne suis pas sûr.
J'ai obtenu la plupart de mes informations ici: http://www.cplusplus.com/forum/beginner/75634/ (les deux derniers messages)
Vous devez mettre deux points avant toupper
:
transform(input.begin(), input.end(), input.begin(), ::toupper);
Explication:
Il existe deux fonctions toupper
différentes:
toupper
dans l'espace de noms global (accessible avec ::toupper
), qui vient de C.
toupper
dans l'espace de noms std
(accessible avec std::toupper
) qui a plusieurs surcharges et ne peut donc pas être simplement référencé avec un nom uniquement. Vous devez le convertir explicitement en une signature de fonction spécifique afin d'être référencé, mais le code pour obtenir un pointeur de fonction semble moche: static_cast<int (*)(int)>(&std::toupper)
Puisque vous êtes using namespace std
, Lors de l'écriture de toupper
, 2. masque 1. et est donc choisi, selon les règles de résolution de nom.
Boost algorithmes de chaîne:
#include <boost/algorithm/string.hpp>
#include <string>
std::string str = "Hello World";
boost::to_upper(str);
std::string newstr = boost::to_upper_copy("Hello World");
Essayez ce petit programme, directement depuis référence C++
#include <iostream>
#include <algorithm>
#include <string>
#include <functional>
#include <cctype>
using namespace std;
int main()
{
string s;
cin >> s;
std::transform(s.begin(), s.end(), s.begin(), std::ptr_fun<int, int>(std::toupper));
cout << s;
return 0;
}
Vous pourriez faire:
string name = "john doe"; //or just get string from user...
for(int i = 0; i < name.size(); i++) {
name.at(i) = toupper(name.at(i));
}
#include <iostream>
using namespace std;
//function for converting string to upper
string stringToUpper(string oString){
for(int i = 0; i < oString.length(); i++){
oString[i] = toupper(oString[i]);
}
return oString;
}
int main()
{
//use the function to convert string. No additional variables needed.
cout << stringToUpper("Hello world!") << endl;
return 0;
}