c++ - How to use std::toupper in std::for_each? -


i'm trying convert lowercase characters of string uppercase counterpart using std::toupper function , i'm using std::for_each algorithm iterate on characters in string.

#include <iostream> #include <string> #include <algorithm> #include <locale>  std::string convert_toupper(std::string *x) {   return std::toupper(*x, std::locale()); }  int main() {   std::string x ("example");    std::for_each(x.begin(), x.end(), convert_toupper); } 

when compile code i'm getting error:

in file included /usr/include/c++/4.8/algorithm:62:0,                  me2.cpp:3: /usr/include/c++/4.8/bits/stl_algo.h: in instantiation of ‘_funct std::for_each(_iiter, _iiter, _funct) [with _iiter = __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >; _funct = std::basic_string<char> (*)(std::basic_string<char>*)]’: me2.cpp:13:52:   required here /usr/include/c++/4.8/bits/stl_algo.h:4417:14: error: invalid conversion ‘char’ ‘std::basic_string<char>*’ [-fpermissive]   __f(*__first);               ^ 

what proper way of character conversion lowercase uppercase using std::toupper , std::for_each?

a string container of chars, basically. when iterate of string, going 1 char @ time. functor pass for_each called char, not string*, hence error:

invalid conversion ‘char’ ‘std::basic_string<char>* 

the correct implementation be:

std::for_each(x.begin(), x.end(), std::toupper); 

that, however, nothing. return value of toupper ignored, , function has no side effects. if wanted transform string upper case version, have use std::transform:

std::transform(x.begin(), x.end(), x.begin(), std::toupper); 

or, provde locale:

char locale_upper(char c) { return std::toupper(c, std::locale()); } std::transform(x.begin(), x.end(), x.begin(), locale_upper); 

or, in c++11:

std::transform(x.begin(), x.end(), x.begin(), [](char c){     return std::toupper(c, std::locale()); }); 

at point might use for-loop:

for (char& c : x) {     c = std::toupper(c, std::locale()); } 

Comments

Popular posts from this blog

c++ - Difference between pre and post decrement in recursive function argument -

php - Nothing but 'run(); ' when browsing to my local project, how do I fix this? -

php - How can I echo out this array? -