Resolvendo um problema de Strings agora! Fiz duas soluções em C++ e uma em C. Confiram!
Problema: 2242
Enunciado:
Em chats, é muito comum entre jovens e adolescentes utilizar sequências de letras, que parecem muitas vezes aleatórias, para representar risadas. Alguns exemplos comuns são:
huaauhahhuahau
hehehehe
ahahahaha
jaisjjkasjksjjskjakijs
huehuehue
Cláudia é uma jovem programadora que ficou intrigada pela sonoridade das “risadas digitais”. Algumas delas ela nem mesmo consegue pronunciar! Mas ela percebeu que algumas delas parecem transmitir melhor o sentimento da risada que outras. A primeira coisa que ela percebeu é que as consoantes não interferem no quanto as risadas digitais influenciam na transmissão do sentimento. A segunda coisa que ela percebeu é que as risadas digitais mais engra¸cadas são aquelas em que as sequências de vogais são iguais quando lidas na ordem natural (da esquerda para a direita) ou na ordem inversa (da direita para a esquerda), ignorando as consoantes. Por exemplo, “hahaha” e “huaauhahhuahau” estão entre as risadas mais engraçadas, enquanto “riajkjdhhihhjak” e “huehuehue” não estão entre as mais engraçadas. Cláudia está muito atarefada com a análise estatística das risadas digitais e pediu sua ajuda para escrever um programa que determine, para uma risada digital, se ela é das mais engraçadas ou não.
Linguagens: C e C++
Código em C:
#define TAM 55 #include <stdio.h> #include <string.h> int main() { int i, j, tam, r = 1; char linha[TAM], vogais[TAM]; scanf("%s", &linha); for (i = 0, j = 0; i < strlen(linha); i++) { switch (linha[i]) { case 'a': case 'e': case 'i': case 'o': case 'u': vogais[j] = linha[i]; j++; break; default: break; } } tam = j; for (i = 0; i < tam/2; i++, j--) { if (vogais[i] != vogais[j-1]) { r = 0; break; } } printf("%c\n", (!r? 'N' : 'S')); return 0; }
Código em C++:
A string lida é percorrida, copiando todas vogais para a string vogais. Então, é feito uma copia dela invertida e as duas são comparadas, resultado S caso sejam iguais e N caso sejam diferentes.
A string lida é percorrida, copiando todas vogais para a string vogais. Então, é feito uma copia dela invertida e as duas são comparadas, resultado S caso sejam iguais e N caso sejam diferentes.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | #include <iostream> #include <algorithm> using namespace std; bool vogal(char letra){ switch(letra){ case 'a': case 'e': case 'i': case 'o': case 'u': return true; default: return false; } } int main() { string risada; cin >> risada; string vogais = ""; for(int i=0; i<risada.size();i++){ if(vogal(risada[i])){ vogais += risada[i]; } } string reversed = vogais; reverse(reversed.begin(),reversed.end()); if(reversed == vogais) cout << "S" << endl; else cout << "N" << endl; return 0; } |
#include <iostream> using namespace std; int main() { int i, j, tam; string linha, vogais; bool r = true; cin >> linha; for (i = 0; i < linha.size(); i++) { switch (linha[i]) { case 'a': case 'e': case 'i': case 'o': case 'u': vogais.push_back(linha[i]); break; default: break; } } tam = vogais.size(); for (i = 0, j = tam-1; i < tam/2; i++, j--) { if (vogais[i] != vogais[j]) { r = false; break; } } cout << (!r? "N" : "S") << endl; return 0; }