Solução:
#include <stdio.h> #define LIM 100 int main(){ char str[LIM]; int i, nletras = 'z' - 'a' + 1; int freq[LIM]; /* Lê uma linha de texto */ scanf("%[^\n]", str); /* Inicializa com 0 o vetor de contadores */ for(i = 0; i < nletras; i++){ freq[i] = 0; } /* Percorre a string, contando a frequência das letras */ i = 0; while(str[i] != '\0'){ /* Identifica letras minúsculas */ if(str[i] >= 'a' && str[i] <= 'z') freq[str[i] - 'a']++; /* Identifica letras maiúsculas */ else if(str[i] >= 'A' && str[i] <= 'Z') freq[str[i] - 'A']++; i++; } /* Imprime a frequência das letras com contagem não nula */ for(i = 0; i < nletras; i++){ if(freq[i] > 0) printf("letra: %c, freq: %d\n", 'a'+i, freq[i]); } return 0; }
Por questões de simplicidade, vamos considerar apenas duas regras que funcionam para alguns casos particulares:
Sentenças negativas: Reorganize a frase movendo o "not" para o final.
Por exemplo: "I will not help you" se transforma em "I will help you not".
Demais sentenças: Tome as duas primeiras palavras da frase, e coloque
elas no final da frase. Exemplos:
"you will talk like yoda" muda para "talk like yoda, you will".
"you have much to learn" vira "much to learn, you have".
Curiosidade: Essa questão é baseada
nos sites: the Yoda-speak generator
http://www.yodaspeak.co.uk/
http://www.yodajeff.com/pages/talk/likeyoda.shtml
Solução:
A solução abaixo trata apenas o segundo caso das demais sentenças.
#include <stdio.h> #include <string.h> int main(){ char palavras[20][30]; char pal[30]; int r,i,n; char ch; i = 0; while(1){ r = scanf("%s", pal); if(r == EOF || r == 0) break; else{ strcpy(palavras[i], pal); i++; } ch = getchar(); while(ch == ' ') ch = getchar(); if(ch == '\n') break; else ungetc(ch, stdin); } n = i; for(i = 2; i < n-1; i++){ printf("%s ", palavras[i]); } printf("%s", palavras[n-1]); printf(", %s ", palavras[0]); printf("%s\n", palavras[1]); return 0; }
dest
uma versão do texto contido em src
com todos "r" e "rr" trocados por "l", exceto no caso em que o "r" ocorre no final de uma palavra.
void Cebolinha(char dest[], char src[]);
Solução:
#include <stdio.h> #include <string.h> void Cebolinha(char dest[], char src[]){ int j,i,n; char c; n = strlen(src); j = 0; for(i = 0; i < n; i++){ if(src[i] == 'r' && src[i+1] >= 'a' && src[i+1] <= 'z'){ if(src[i+1] == 'r') i++; c = 'l'; } else c = src[i]; dest[j] = c; j++; } dest[j] = '\0'; } int main(){ char dest[500]; char src[] = "e chega de disputar essa rua com a monica, eu poderei comprar ruas bairros cidades"; Cebolinha(dest, src); printf("%s\n", dest); return 0; }