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 Dimanaux
Пользователь
55 комментариев по лайкам по дате
Оставьте комментарий...
Оставьте комментарий...
justmax437 8 лет
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 8 лет
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 8 лет
java?
justmax437 8 лет
да
Dimanaux 8 лет
Автор
Я не понимаю, не знаю такой язык. Подскажи название. Если решение будет верным, я постараюсь разобраться
SUPER_S 8 лет
А как решать пробовал? Мне в голову только двумерный массив с двойным for лезут
Dimanaux 8 лет
Автор
Пробовал через одномерный массив с проверкой первой буквы и остальных букв через цикл
Dimanaux 8 лет
Автор
РЕШЕНИЕ!!! Код 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 8 лет
Автор
ВСЕМ СПАСИБО! Каждый комментарий мне по-своему помог.
Dimanaux 8 лет
Автор
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 8 лет
Вот, начирикал решение для случаев формата 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 8 лет
Автор
Спасибо тебе, ты подтолкнул меня на мысль. Теперь задача решена.
Dimanaux 8 лет
Автор
Вот этот код. comment
Dimanaux 8 лет
Автор
Почему [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 8 лет
Боже, это легкотня.
Простейшим for проходишься по массиву char, используя побитовый xor на 6 бит вроде в ASCII.
NickMeller 8 лет
Там точнее не ксор, а побитовое умножение и сложение.
Оставьте комментарий...
Оставьте комментарий...