Помогите решить задачу на C++
A. cAPS lOCK
ограничение по времени на тест0.5 second
ограничение по памяти на тест256 megabytes
вводстандартный ввод
выводстандартный вывод
зАЧЕМ НУЖНА КЛАВИША cAPS lOCK?
Caps Lock — клавиша компьютерной клавиатуры, предназначенная для автоматической (постоянной) смены регистра букв со строчных на прописные. Будучи случайно нажатой, она приводит к последствиям вроде первого абзаца в условии этой задачи.
Будем считать, что слово набрано с ошибочно нажатой клавишей Caps Lock, если:
либо оно полностью состоит из прописных букв;
либо прописными являются все его буквы, кроме первой.
В таком случае, нужно автоматически поменять регистр всех букв на противоположный. Например, регистр букв слов «hELLO», «HTTP», «z» должен быть изменен.
Напишите программу, которая применяет описанное выше правило или оставляет слово без изменения, если оно не применимо.
Входные данные
В первой строке входных данных записано слово, состоящее из прописных или строчных букв латинского алфавита. Длина слова — от 1 до 100 символов включительно.
Выходные данные
Выведите результат обработки данного слова.
Примеры
входные данныеСкопировать
cAPS
выходные данныеСкопировать
Caps
входные данныеСкопировать
Lock
выходные данныеСкопировать
Lock
#include <iostream>
#include <algorithm>
#include <cctype>
using namespace std;
int main(){
char s[101]; cout<<"Word: "; cin>>s; int n=find(s,s+101,'\0')-s;
if(!*find_if(s+1,s+n,::islower))for(char &c:s)
c=isupper(c)?tolower(c):islower(c)?toupper(c):c; cout<<s<<endl;}
Для решения данной задачи на C++ можно использовать следующий подход:
1. Считать входное слово.
2. Проверить условия, при которых нужно поменять регистр букв. Для этого можно проверить два случая:
- Если слово полностью состоит из прописных букв (используя функцию `isupper` из заголовочного файла `<cctype>`), то нужно поменять регистр всех букв на противоположный.
- Если прописными являются все буквы, кроме первой, то также нужно поменять регистр всех букв на противоположный.
3. Вывести результат обработки слова.
Вот пример реализации данного подхода на C++:
```cpp
#include <iostream>
#include <cctype>
int main() {
std::string word;
std::cin >> word;
bool changeCase = false;
// Проверяем условия для изменения регистра букв
if (std::all_of(word.begin() + 1, word.end(), ::isupper) || std::all_of(word.begin(), word.end(), ::isupper)) {
changeCase = true;
}
// Изменяем регистр букв, если нужно
if (changeCase) {
for (char& c : word) {
if (::islower(c)) {
c = ::toupper(c);
} else {
c = ::tolower(c);
}
}
}
// Выводим результат
std::cout << word << std::endl;
return 0;
}
```
Эта программа считывает слово, проверяет условия для изменения регистра букв и выводит результат обработки слова.