adblock check

Не могу решить задачу (РЕШЕНО!)

Помогите с задачей. Не решайте за меня, просто намекните в каком направлении двигаться, дайте задачу проще (промежуточную), которую необходимо решить на пути к решению следующей:

A. cAPS lOCK

ограничение по времени на тест: 0.5 сек

ограничение по памяти на тест: 256 MB

ввод: стандартный ввод

вывод: стандартный вывод

зАЧЕМ НУЖНА КЛАВИША cAPS lOCK?

Caps Lock — клавиша компьютерной клавиатуры, предназначенная для автоматической (постоянной) смены регистра букв со строчных на прописные. Будучи случайно нажатой, она приводит к последствиям вроде первого абзаца в условии этой задачи.

Будем считать, что слово набрано с ошибочно нажатой клавишей Caps Lock, если:

  • либо оно полностью состоит из прописных букв;
  • либо прописными являются все его буквы, кроме первой.

В таком случае, нужно автоматически поменять регистр всех букв на противоположный. Например, регистр букв слов «hELLO», «HTTP», «z» должен быть изменен.

Напишите программу, которая применяет описанное выше правило или оставляет слово без изменения, если оно не применимо.

Входные данныеВ первой строке входных данных записано слово, состоящее из прописных или строчных букв латинского алфавита. Длина слова — от 1 до 100 символов включительно.

Выходные данные: выведите результат обработки данного слова.

Примеры

входные данные

cAPS

выходные данные

Caps

входные данные

Lock

выходные данные

Lock

Dimanaux
Пользователь
55 комментариев по лайкам по дате
Оставьте комментарий...
Оставьте комментарий...
justmax437
10 лет
BufferedReader s = new BufferedReader(new InputStreamReader(System.in));
int symbolCode = 0;

while ((symbolCode = s.read()) != -1) {
char input = Character.forDigit(symbolCode);
if (Character.isLetter(input) {
System.out.print((Character.isUpperCase(input)? Character.toLowerCase(input): Character.toUpperCase(input)));
}
}

s.close();

примерно так
justmax437
10 лет
BufferedReader s = new BufferedReader(new InputStreamReader(System.in));
int symbolCode = 0;

while ((symbolCode = s.read()) != -1) {
char input = (char) symbolCode;
if (Character.isLetter(input) {
System.out.print((Character.isUpperCase(input)? Character.toLowerCase(input): Character.toUpperCase(input)));
}
}

s.close();

ашибочка вышла, так лучше будет
SUPER_S
10 лет
java?
justmax437
10 лет
да
Dimanaux
10 лет
Автор
Я не понимаю, не знаю такой язык. Подскажи название. Если решение будет верным, я постараюсь разобраться
SUPER_S
10 лет
А как решать пробовал? Мне в голову только двумерный массив с двойным for лезут
Dimanaux
10 лет
Автор
Пробовал через одномерный массив с проверкой первой буквы и остальных букв через цикл
Dimanaux
10 лет
Автор
РЕШЕНИЕ!!! Код C++
.
.
.
.
.
.
.
.
.
.
.
#include
#include
using namespace std;
void main()
{
const int n = 101;
short int a = 97, z = 122, A = 65, Z = 90;
char c[n];
cin >> c;
int d = strlen©;
int s = 0;
for (int i = 0; i < d; i++) {
if ((c[i] >= A) && (c[i] <= Z))
s++;
}
if (d == s) {
for (int i = 0; i < d; i++)
c[i] += 32;
}
else if (d — 1 == s) {
if ((c[0] >= a) && (c[0] <= z)) {
c[0] -= 32;
for (int i = 1; i < d; i++) {
c[i] += 32;
}
}
}
cout << c;
}
Dimanaux
10 лет
Автор
ВСЕМ СПАСИБО! Каждый комментарий мне по-своему помог.
Dimanaux
10 лет
Автор
const int n = 100;

char a[n];

cin >> a;

if ((a[0] >= 97)&&(a[0] <= 122))

a[0] -= 32;

for (int i = 1; i < n; i++) {

if ((a[i] >= 65)&&(a[i] <= 90))

a[i] += 32;

}

cout << a;

return 0;

NickMeller
10 лет
Вот, начирикал решение для случаев формата xYYY
Доделывай сам, можно завести ещё один проверочный цикл, который пройдется по массиву и заполнит две bool-переменные, определяющие тип.
#include <iostream>
#include <cstring>
using namespace std;
int main(){
char ch[101];
cin>>ch;
for(int i = 0; i < strlen(ch); i++) {
if(i==0)
ch[i]=ch[i]&223;
else ch[i]=ch[i]|32;
cout<<ch[i];
}
}
Dimanaux
10 лет
Автор
Спасибо тебе, ты подтолкнул меня на мысль. Теперь задача решена.
Dimanaux
10 лет
Автор
Вот этот код. comment
Dimanaux
10 лет
Автор
Почему [101]? Вот этот код я давно писал. Сейчас думаю, надо посмотреть, прописная ли первая буква, если да, то с помощью цикла смотрим кол-во прописных букв в слове, если совпадает с размером всей строки, то меняем регистр всех, кроме первой букв. Иначе смотрим на остальные: если все прописные кроме первой, то бишь if (n == strlen(ch) — 1) (н — сумма больших букв например), то меняем регистр всех букв.
#include <iostream>
<span class="kwd" style="color: rgb(0, 0, 136);">using</span><span class="pln"> </span><span class="kwd" style="color: rgb(0, 0, 136);">namespace</span><span class="pln"> std</span><span class="pun" style="color: rgb(102, 102, 0);">;</span><span class="pln"> </span><span class="kwd" style="color: rgb(0, 0, 136);">int</span><span class="pln"> main</span><span class="pun" style="color: rgb(102, 102, 0);">()</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">{</span><span class="pln"> </span><span class="kwd" style="color: rgb(0, 0, 136);">const</span><span class="pln"> </span><span class="kwd" style="color: rgb(0, 0, 136);">int</span><span class="pln"> n </span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="pln"> </span><span class="lit" style="color: rgb(0, 102, 102);">100</span><span class="pun" style="color: rgb(102, 102, 0);">;</span><span class="pln"> </span><span class="kwd" style="color: rgb(0, 0, 136);">char</span><span class="pln"> a</span><span class="pun" style="color: rgb(102, 102, 0);">[</span><span class="pln">n</span><span class="pun" style="color: rgb(102, 102, 0);">];</span><span class="pln"> cin </span><span class="pun" style="color: rgb(102, 102, 0);">>></span><span class="pln"> a</span><span class="pun" style="color: rgb(102, 102, 0);">;</span><span class="pln"> </span><span class="kwd" style="color: rgb(0, 0, 136);">if</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">((</span><span class="pln">a</span><span class="pun" style="color: rgb(102, 102, 0);">[</span><span class="lit" style="color: rgb(0, 102, 102);">0</span><span class="pun" style="color: rgb(102, 102, 0);">]</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">>=</span><span class="pln"> </span><span class="lit" style="color: rgb(0, 102, 102);">97</span><span class="pun" style="color: rgb(102, 102, 0);">)&&(</span><span class="pln">a</span><span class="pun" style="color: rgb(102, 102, 0);">[</span><span class="lit" style="color: rgb(0, 102, 102);">0</span><span class="pun" style="color: rgb(102, 102, 0);">]</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);"><=</span><span class="pln"> </span><span class="lit" style="color: rgb(0, 102, 102);">122</span><span class="pun" style="color: rgb(102, 102, 0);">))</span><span class="pln"> a</span><span class="pun" style="color: rgb(102, 102, 0);">[</span><span class="lit" style="color: rgb(0, 102, 102);">0</span><span class="pun" style="color: rgb(102, 102, 0);">]</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">-=</span><span class="pln"> </span><span class="lit" style="color: rgb(0, 102, 102);">32</span><span class="pun" style="color: rgb(102, 102, 0);">;</span><span class="pln"> </span><span class="kwd" style="color: rgb(0, 0, 136);">for</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="kwd" style="color: rgb(0, 0, 136);">int</span><span class="pln"> i </span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="pln"> </span><span class="lit" style="color: rgb(0, 102, 102);">1</span><span class="pun" style="color: rgb(102, 102, 0);">;</span><span class="pln"> i </span><span class="pun" style="color: rgb(102, 102, 0);"><</span><span class="pln"> n</span><span class="pun" style="color: rgb(102, 102, 0);">;</span><span class="pln"> i</span><span class="pun" style="color: rgb(102, 102, 0);">++)</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">{</span><span class="pln"> </span><span class="kwd" style="color: rgb(0, 0, 136);">if</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">((</span><span class="pln">a</span><span class="pun" style="color: rgb(102, 102, 0);">[</span><span class="pln">i</span><span class="pun" style="color: rgb(102, 102, 0);">]</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">>=</span><span class="pln"> </span><span class="lit" style="color: rgb(0, 102, 102);">65</span><span class="pun" style="color: rgb(102, 102, 0);">)&&(</span><span class="pln">a</span><span class="pun" style="color: rgb(102, 102, 0);">[</span><span class="pln">i</span><span class="pun" style="color: rgb(102, 102, 0);">]</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);"><=</span><span class="pln"> </span><span class="lit" style="color: rgb(0, 102, 102);">90</span><span class="pun" style="color: rgb(102, 102, 0);">))</span><span class="pln"> a</span><span class="pun" style="color: rgb(102, 102, 0);">[</span><span class="pln">i</span><span class="pun" style="color: rgb(102, 102, 0);">]</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">+=</span><span class="pln"> </span><span class="lit" style="color: rgb(0, 102, 102);">32</span><span class="pun" style="color: rgb(102, 102, 0);">;</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">}</span><span class="pln"> cout </span><span class="pun" style="color: rgb(102, 102, 0);"><<</span><span class="pln"> a</span><span class="pun" style="color: rgb(102, 102, 0);">;</span><span class="pln"> </span><span class="kwd" style="color: rgb(0, 0, 136);">return</span><span class="pln"> </span><span class="lit" style="color: rgb(0, 102, 102);">0</span><span class="pun" style="color: rgb(102, 102, 0);">;</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">}</span>
NickMeller
10 лет
Боже, это легкотня.
Простейшим for проходишься по массиву char, используя побитовый xor на 6 бит вроде в ASCII.
NickMeller
10 лет
Там точнее не ксор, а побитовое умножение и сложение.
Оставьте комментарий...
Оставьте комментарий...