c++ 如何在不同的行上返回大写和小写字符串?

cbeh67ev  于 2023-07-01  发布在  其他
关注(0)|答案(5)|浏览(105)

我的工作与html,JavaScript和c++。我需要将字符串转换为大写和小写,并将它们返回到前端。我只能以大写或小写形式返回一次字符串。我把它注解掉了,因为我只能返回一个值,对吗?
我已经成功地将字符串转换为小写和大写,但我想知道我是否可以返回两个值而不是一个。

std::string upperCase(std::string words){
    for(int i = 0; i < words.size(); i++) {
        words.at(i) = toupper(words.at(i));
        //words.at(i) = tolower(words.at(i);
    }
    return words;
}

输入:HeLlo输出:下:你好上:你好

yr9zkbsy

yr9zkbsy1#

一个函数最多只能返回一个值,这是正确的。因为你需要两个返回值,你必须把它们打包成其他的数据类型。
有几种选择。你可以使用std::tuple,你可以创建一个包含两个字符串的结构体/类,你可以返回一个字符串向量,等等。
下面的示例使用向量来保存字符串。

#include <iostream>
#include <vector>

std::vector<std::string> upperLowerCase(std::string words){
    std::vector<std::string> res;
    res.push_back(words);
    res.push_back(words);
    for(int i = 0; i < words.size(); i++) {
        res[0].at(i) = toupper(words.at(i));
        res[1].at(i) = tolower(words.at(i));
    }
    return res;
}

int main() {
    std::vector<std::string> v = upperLowerCase("HeLLo");
    std::cout << "Upper: " << v[0] << std::endl; 
    std::cout << "Lower: " << v[1] << std::endl; 
    return 0;
}

下面的示例使用std::tuple

#include <iostream>
#include <tuple>

std::tuple<std::string, std::string> upperLowerCase(std::string words){
    std::string upper = words; 
    std::string lower = words; 
    for(int i = 0; i < words.size(); i++) {
        upper.at(i) = toupper(words.at(i));
        lower.at(i) = tolower(words.at(i));
    }
    return std::make_tuple(upper, lower);
}

int main() {
    std::tuple<std::string, std::string> t = upperLowerCase("HeLLo");
    std::cout << "Upper: " << std::get<0>(t) << std::endl; 
    std::cout << "Lower: " << std::get<1>(t) << std::endl; 
    return 0;
}
dwbf0jvd

dwbf0jvd2#

std::string不是最好的选择。尝试使用std::tuple或简单的数组std::string[2]

std::string str_tolower(std::string s)
{
    std::transform(s.begin(), s.end(), s.begin(),
        [](unsigned char c)
        {
            return std::tolower(c);
        });
    return s;
}
std::string str_toupper(std::string s)
{
    std::transform(s.begin(), s.end(), s.begin(),
        [](unsigned char c)
        {
            return std::toupper(c);
        });
    return s;
}
auto cases = std::make_tuple(str_toupper(s), str_tolower(s));
tcbh2hod

tcbh2hod3#

可以使用std::pair。

std::pair<std::string,std::string> upperCase(std::string words){
    int len = words.length();
    std::pair<std::string,std::string> ret;
    ret.first.resize(len);
    ret.second.resize(len);
    for(int i = 0; i < words.size(); i++) {
        ret.first.at(i) = toupper(words.at(i));
        ret.second.at(i) = tolower(words.at(i);
    }
    return ret;
}
esbemjvw

esbemjvw4#

可以使用包含大小写的结构体:

#include <iostream>
#include <string>

struct Cases
{
    std::string upperCase;
    std::string lowerCase;
}

Cases getCases(std::string words)
{
    Cases itsCases;
    for(int i = 0; i < words.size(); i++) 
    {
        itsCases.upperCase.at(i) = toupper(words.at(i));
        itsCases.lowerCase.at(i) = tolower(words.at(i));
    }
    return itsCases;
}

int main() 
{
    std::cout << "Upper Case: " << getCases("HeLLo").upperCase << std::endl; 
    std::cout << "Lower Case: " << getCases("HeLLo").lowerCase << std::endl; 
    return 0;
}
ggazkfy8

ggazkfy85#

//大写和小写....
var namee = prompt(“输入您的姓名:“);
var select = prompt('in which case you want the result 1 for Uppercase,2 For LowerCase ');
if(select == '1')
{ document.write(namee.toUpperCase()+“
“);
(“您的姓名大写为:“+ name);
}
否则
{
document.write(name.toLowerCase());(“您的姓名小写为“+姓名)
}

相关问题