首页 > 解决方案 > 如何在不同的行上返回大写和小写字符串?

问题描述

我正在使用 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 输出:下:hello 上:HELLO

标签: c++

解决方案


函数最多可以返回一个值是正确的。由于您需要两个返回值,因此您必须将它们打包成其他数据类型。

有几种选择。你可以使用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;
}

推荐阅读