1

入力:

abcdE

出力:

ABCDe

このコードの効率的でコードの少ないソリューションを探しています。

#include <iostream>   
#include <string>
using namespace std;

int main() {
    int len, ;
    string data;

    cin >> data;

    len = data.length();

    for (i = 0; i < len; i++)
        if (isupper(data[i]))
            data[i] = tolower(data[i]);
        else
            data[i] = toupper(data[i]);

    cout << data << endl;

    return 0;
}
4

2 に答える 2

2

std::transformを使用する必要があると思います:

std::string str("abcdE");
std::transform(str.begin(), str.end(), str.begin(), [](char c) {
        return isupper(c) ? tolower(c) : toupper(c);
});
于 2016-09-30T19:23:46.207 に答える
0

ライブラリからstd::for_eachを使用することもできます。algorithm

#include <iostream>   
#include <string>
#include <algorithm>

int main() {
    std::string data = "AbcDEf";
    std::for_each(data.begin(), data.end(), [](char& x){std::islower(x) ? x = std::toupper(x) : x = std::tolower(x);});
    std::cout << data<< std::endl;
}
于 2016-09-30T19:26:50.073 に答える