thamer Posted August 18, 2012 at 11:57 PM Report Share #472796 Posted August 18, 2012 at 11:57 PM Olá pessoal, tudo bem? Segue o problema: O usuário vai informar uma string e uma letra. Logo após, o programa deve ler ambos e, caso a letra conter na string, deve repetir a letra até encontrar a mesma (letra) ou até terminar a string. Ex: Palavra - Banana; Letra - a; Resultado: Baaana Ex2: Palavra - Carro Letra - r Resultado: Carrr Ex3: Palavra - Andar Letra: a Resultado: aaaar O que desenvolvi até agora (só para mostrar que não sou um folgado): #include<stdio.h> #include<conio.h> #define tam 20 main(void){ char str[tam], letra; int i; printf("Digite a letra: "); scanf("%c", &letra); printf("Digite a string: "); gets(str); for(i=0; i<tam; i++){ Sim, estou aprendendo lógica e programação a partir da linguagem C. Tenho problemas com a parte lógica e, aproveitando o tópico, caso tenham alguma sugestão para aprimorar meu modo de pensar, eu ficaria grato. Se quiserem dar apenas dicas, seria mais interessante. Grato! Link to comment Share on other sites More sharing options...
KTachyon Posted August 19, 2012 at 12:09 AM Report Share #472797 Posted August 19, 2012 at 12:09 AM Pelo segundo exemplo, tens que ter em atenção que se as letras forem consecutivas, não conta. Basicamente utilizas uma variável de estado que indica se deves substituir ou não os caracteres. Para resolveres aquilo que disse antes podes, ou calcular a partir da posição do primeiro char encontrado, ou utilizares outra variável de estado para indicar se já substituiste pelo menos um char (e mudas assim que substituires o primeiro). Agora, tens que ter atenção a uma coisa. Tu tens um array de chars com tamanho 20, mas a tua string pode ser menor que esses 20 chars. Se ignorares isso, podes vir a preencher casas que não fazem parte da string. Podes resolver isso se verificares se a casa tem o char \0. E se o útilizador escrever uma palavra com mais de 20 chars, mesmo terminando a verificação na última casa do array, não estás a limitar a quantidade de informação lida pelo scanf, o que te pode fazer ultrapassar o limite de espaço que tens reservado para o input do utilizador. 1 Report “There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.” -- Tony Hoare Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted August 19, 2012 at 07:09 AM Report Share #472818 Posted August 19, 2012 at 07:09 AM #include<stdlib.h> #include<stdio.h> #include<string.h> //#include<conio.h> <--- não uses isto por favor #define TAM 20 enum { Ler, Inicio, Substituir } Estado; int main(void){ // <--- falta o valor de retorno da função main (int) char str[TAM], letra; Estado estado = Ler; int i; printf("Digite a letra: "); scanf("%c", &letra); printf("Digite a string: "); fgets(str, TAM, stdin); // <--- é sempre melhor usar a função fgets do que a gets for(i=0; i<strlen(str); i++){ // <--- irás iterar de 0 até ao tamanho da string switch (estado) // <--- verificar o estado actual { case Ler: if (str[i] == letra) // <--- se estiveres a ler o carater e encontrares a letra irás passar para o estado de começar estado = Inicio; break; case Inicio: if (str[i] != letra) // <--- se estiveres a começar a substituir e encontrares uma letra diferente irás começar a substituir { estado = Substituir; str[i] = letra; // <--- não esquecer de subtituir a letra diferente encontrada } break; case Substituir: if (str[i] != letra) str[i] = letra; // <--- se for diferente, substitui a letra encontrada else estado = Ler; // <--- se for igual, passas ao estado de ler break; } } // apresentação do resultado printf("resultado : %s\n", str); return 0; } a única razão porque te escrevi o código foi porque como estás a começar, uma máquina de estado pode ser um bocado complicado, não esperes este tipo de ajudas muitas vezes IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now