Pesquisar este blog

Livros Recomendados

Mostrando postagens com marcador 1234. Mostrar todas as postagens
Mostrando postagens com marcador 1234. Mostrar todas as postagens

sábado, 30 de janeiro de 2021

URI - 1234 - Sentença Dançante - Strings - C

Plataforma: URI
Problema1234

Enunciado:
Uma sentença é chamada de dançante se sua primeira letra for maiúscula e cada letra subsequente for o oposto da letra anterior. Espaços devem ser ignorados ao determinar o case (minúsculo/maiúsculo) de uma letra. Por exemplo, "A b Cd" é uma sentença dançante porque a primeira letra ('A') é maiúscula, a próxima letra ('b') é minúscula, a próxima letra ('C') é maiúscula, e a próxima letra ('d') é minúscula.

Linguagem: C


Solução:

Utilizar uma variável de controle para saber se a letra anterior é uppercase ou não. Se for, verifica a letra atual e, se necessário, passa ela para lowercase (somando 32). Se não for, verifica a letra seguinte e, se necessário, passa ela para uppercase (diminuindo 32). Aplicar esta lógica para todo caractere e imprimi-lo até chegar ao final da palavra.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
    char *palavra = (char *) malloc(sizeof(char) * 51);
    int indice, upper;
    
    while(gets(palavra) != NULL) {
        
        upper = 1;
        indice = 0;
        
        while (palavra[indice] != '\0') {
            
            if ((palavra[indice] > 64 && palavra[indice] < 91) || (palavra[indice] > 96 && palavra[indice] < 123)) {
                
                if (palavra[indice] > 64 && palavra[indice] < 91 && upper)
                    upper = 0;

                else if (palavra[indice] > 96 && palavra[indice] < 123 && upper == 0)
                    upper = 1;

                else if (upper) {
                    palavra[indice] -= 32;
                    upper = 0;
                }
                
                else {
                    palavra[indice] += 32;
                    upper = 1;
                }
            }
            
            printf("%c", palavra[indice]);
            indice++;
            
        }
        
        printf("\n");
    }
    
    return 0;
}

URI - 1234 - Sentença Dançante - Strings - C++ - Solução Alternativa

Plataforma: URI
Problema1234

Enunciado:
Uma sentença é chamada de dançante se sua primeira letra for maiúscula e cada letra subsequente for o oposto da letra anterior. Espaços devem ser ignorados ao determinar o case (minúsculo/maiúsculo) de uma letra. Por exemplo, "A b Cd" é uma sentença dançante porque a primeira letra ('A') é maiúscula, a próxima letra ('b') é minúscula, a próxima letra ('C') é maiúscula, e a próxima letra ('d') é minúscula.

Linguagem: C++

Solução:
Utilizar uma variável de controle (upper, que pode ser int ou bool) para saber se a letra anterior é uppercase ou não. Se for, verifica a letra atual e, se necessário, passa ela para lowercase (somando 32). Se não for, verifica a letra seguinte e, se necessário, passa ela para uppercase (diminuindo 32). Aplicar esta lógica para todo caractere e imprimi-lo até chegar ao final da palavra. Não esquecer de imprimir a quebra de linha no fim do algoritmo (cout << endl;).

#include <iostream>

using namespace std;

int main() {
    string palavra;
    int indice, upper;
    
    while(getline(cin, palavra)) {
        upper = 1;
        indice = 0;
        while (palavra[indice] != '\0') {
            if ((palavra[indice] > 64 && palavra[indice] < 91) || (palavra[indice] > 96 && palavra[indice] < 123)) {
                if (palavra[indice] > 64 && palavra[indice] < 91 && upper) {
                    cout << palavra[indice];
                    upper = 0;
                }
                else if (palavra[indice] > 96 && palavra[indice] < 123 && upper == 0) {
                    cout << palavra[indice];
                    upper = 1;
                }
                else if (upper) {
                    cout << (char) (palavra[indice] - 32);
                    upper = 0;
                }
                else {
                    cout << (char) (palavra[indice] + 32);
                    upper = 1;
                }
            }
            else {
                cout << palavra[indice];
            }
            indice++;
        }
        cout << endl;
    }
    return 0;
}

sexta-feira, 10 de abril de 2020

URI - 1234 - Sentença Dançante - Strings - C++

Plataforma: URI
Problema1234

Enunciado:
Uma sentença é chamada de dançante se sua primeira letra for maiúscula e cada letra subsequente for o oposto da letra anterior. Espaços devem ser ignorados ao determinar o case (minúsculo/maiúsculo) de uma letra. Por exemplo, "A b Cd" é uma sentença dançante porque a primeira letra ('A') é maiúscula, a próxima letra ('b') é minúscula, a próxima letra ('C') é maiúscula, e a próxima letra ('d') é minúscula.

Linguagem: C++

Solução:
Ao fazer a leitura da linha, uma variável booleana é criada chamada upper. Esta variável fica com o valor true, quando a próxima letra a ser escrita é maiúscula. Em caso de false, ela é minúscula.
A linha é percorrida, verificando se na posição i possui uma letra. Caso possua, é verificado se a letra é minúscula e a variável upper manda escrever uma letra maiúscula. Neste caso, é invertido de minúsculo para maiúsculo fazendo line[i] = line[i] - 'a' + 'A'.
O mesmo é feito simetricamente quando upper é false.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
using namespace std;

int main(){
 string line;
 while(getline (cin, line)){
  bool upper = true;
  for(int i=0; i<line.size(); i++){
   if((line[i]>='a' and line[i]<='z') or (line[i]>='A' and line[i]<='Z')){ 
    if(upper and line[i]>='a' and line[i]<='z'){
     line[i] = line[i] - 'a' + 'A';
    }
    if(!upper and line[i]>='A' and line[i]<='Z'){
     line[i] = line[i] - 'A' + 'a';
    }
    upper = !upper;
   }
  }
  cout << line << endl;
 }
    return 0;
}

Postagem em destaque

URI (BEECROWD) - 2158 - Helping Uncle Cláudio (Ajudando o Tio Cláudio) - Matemática - C, C++ e Haskell

Buenas! Estou aqui mais uma vez para resolver um problema de Matemática! Agora tenho resolvido alguns dessa categoria, pra que vocês possam ...

Postagens mais visitadas