如何将C ++字符串转换为大写

时间:2014-05-01 23:26:55

标签: c++ string uppercase

我需要将C ++中的字符串转换为完整的大写字母。我一直在寻找一段时间,并找到了一种方法:

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

不幸的是,这不起作用,我收到了此错误消息:

没有用于调用'transform的匹配函数(std :: basic_string :: iterator,std :: basic_string :: iterator,std :: basic_string :: iterator,

我尝试过其他方法也没用。这是最接近工作的。

所以我问的是我做错了什么。也许我的语法很糟糕或者我需要包含一些内容。我不确定。

我的大部分信息都来自: http://www.cplusplus.com/forum/beginner/75634/ (最后两篇文章)

7 个答案:

答案 0 :(得分:28)

您需要在toupper之前加上双冒号:

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

说明:

有两种不同的toupper功能:

    全局命名空间中的
  1. toupper(使用::toupper访问),来自C。

  2. {li>

    toupperstd命名空间(使用std::toupper访问),它具有多个重载,因此不能简单地仅使用名称引用。您必须将其显式地转换为特定的函数签名才能被引用,但获取函数指针的代码看起来很丑:static_cast<int (*)(int)>(&std::toupper)

    由于您using namespace std,在撰写toupper时,2。隐藏1.因此根据名称解析规则进行选择。

答案 1 :(得分:5)

提升字符串算法:

#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

答案 2 :(得分:4)

直接从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

答案 3 :(得分:1)

你可以这样做:

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

使用 BitWise 运算符的大写到小写,反之亦然

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:有关详细信息,请查看此 link

答案 6 :(得分:-3)

您还可以使用下面的代码中的函数将其转换为大写。

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