How to Convert a C++ String to Uppercase

I need to convert a string in C++ to full upper case. I've been searching for a while and found one way to do it:

#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; } 

Unfortunately this did not work and I received this error message:

no matching function for call to 'transform(std::basic_string::iterator, std::basic_string::iterator, std::basic_string::iterator,

I've tried other methods that also did not work. This was the closest to working.

So what I'm asking is what I am doing wrong. Maybe my syntax is bad or I need to include something. I am not sure.

I got most of my info here: (last two posts)

1

7 Answers

You need to put a double colon before toupper:

transform(input.begin(), input.end(), input.begin(), ::toupper); 

Explanation:

There are two different toupper functions:

  1. toupper in the global namespace (accessed with ::toupper), which comes from C.

  2. toupper in the std namespace (accessed with std::toupper) which has multiple overloads and thus cannot be simply referenced with a name only. You have to explicitly cast it to a specific function signature in order to be referenced, but the code for getting a function pointer looks ugly: static_cast<int (*)(int)>(&std::toupper)

Since you're using namespace std, when writing toupper, 2. hides 1. and is thus chosen, according to name resolution rules.

6

Boost string algorithms:

#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"); 

Convert a String In C++ To Upper Case

Try this small program, straight from C++ reference

#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; } 

Live demo

1

You could do:

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)); } 

Uppercase to Lowercase and viceversa using BitWise operators

1.

string s = "cAPsLock"; for(char &c: s) c = c | ' '; // similar to: c = tolower(c); cout << s << endl; // output: capslock 
string s = "cAPsLock"; for(char &c: s) c = c & ~' '; // similar to: c = toupper(c); cout << s << endl; // output: CAPSLOCK 

PS: for more info check this link

#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; } 

You can also use the function from code below to convert it to Upper-case.

#include<iostream> #include<cstring> using namespace std; //Function for Converting Lower-Case to Upper-Case void fnConvertUpper(char str[], char* des) { int i; char c[1 + 1]; memset(des, 0, sizeof(des)); //memset the variable before using it. for (i = 0; i <= strlen(str); i++) { memset(c, 0, sizeof(c)); if (str[i] >= 97 && str[i] <= 122) { c[0] = str[i] - 32; // here we are storing the converted value into 'c' variable, hence we are memseting it inside the for loop, so before storing a new value we are clearing the old value in 'c'. } else { c[0] = str[i]; } strncat(des, &c[0], 1); } } int main() { char str[20]; //Source Variable char des[20]; //Destination Variable //memset the variables before using it so as to clear any values which it contains,it can also be a junk value. memset(str, 0, sizeof(str)); memset(des, 0, sizeof(des)); cout << "Enter the String (Enter First Name) : "; cin >> str; //getting the value from the user and storing it into Source variable. fnConvertUpper(str, des); //Now passing the source variable(which has Lower-Case value) along with destination variable, once the function is successfully executed the destination variable will contain the value in Upper-Case cout << "\nThe String in Uppercase = " << des << "\n"; //now print the destination variable to check the Converted Value. } 
2

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like