Сверху вниз и наоборот без цикла в C++?
Входные данные:
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;
}
2 ответа
Решение
Я полагаю, вы должны использовать std:: transform:
std::string str("abcdE");
std::transform(str.begin(), str.end(), str.begin(), [](char c) {
return isupper(c) ? tolower(c) : toupper(c);
});
Вы также можете использовать 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;
}