#include <string>
#include <iostream>
#include <algorithm>
#include <cctype>
using namespace std;
int main() {
//create a string
string s("Some STRING with MiXed cASE");
cout << "original: " << s << endl;
//lowercase all characters
transform (s.begin(), s.end(), //source
s.begin(), //destination
tolower); //operation
cout << "lowered: " << s << endl;
//uppercase all characters
transform (s.begin(), s.end(), //source
s.begin(), //destination
toupper); //operation
cout << "uppered: " << s << endl;
}
However, when I compile it, I got this error message:
error: no matching function for call to 'transform(__gnu_cxx::__normal_iterator<char*,>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char*,>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char*,>, std::allocator<char> > >, <unresolved>)'
After googling for it, I've found a tricky solution here. Just made a new function:
char to_lower (const char c) { return tolower(c); }
Then change the transform function calling into:
//lowercase all characters
transform (s.begin(), s.end(), //source
s.begin(), //destination
to_lower); //operation
cout << "lowered: " << s << endl;
It's now compiled with error free, and running as expected. Weird isn't it??
Update : I've found another link explaining this phenomena here.
Rewriting the transform calling into this works too.
//lowercase all characters
transform (s.begin(), s.end(), //source
s.begin(), //destination
(int(*)(int))std::tolower); //operation
cout << "lowered: " << s << endl;
0 comments:
Post a Comment