Gurzi Posted May 9, 2006 at 09:56 PM Report #26687 Posted May 9, 2006 at 09:56 PM Implemente a função *strchr(char *s,char ch) que devolve o endereço da primeira ocorrência de ch em s, caso nao existe devolve NULL(substituí eu por um texto de erro). Nota:(O endereço não é o índice)... Escreva ainda um programa que solicite uma string e um caractér e mostre no ecrâ os caracteres da string original que se encontram a partir do caractér lido(inclusive).. Bem este exercicio é do Luis Damas e eu decidi resolver de forma diferente fazendo uma funçao que fize-sse isto tudo.. Está a funcionar, queria opiniões de formas de melhor lógica, de reduzir código para ir aprendendo.. Outro problema é que quando ele mostra os caracteres da string asseguir no fim aparece sempre : Caracter seguinte -> "NADA" 1 vez.. do genero.. Introduza uma string: "tiago" introduza o caracter : 't' encontraxe o caracter t na x posicao de memoria proximo caracter -> i proximo caracter ->a proximo caracter ->g proximo caracter -> o proximo caracter -> aparece em branco o ultimo why ? como resolver..? o meu code.. #include <stdio.h> #include <stdlib.h> char *strchr(char *s, char ch) { char *ptr=s; while(1) { if (*ptr==ch) { *++s; while (*s!='\0') { printf("Os caracter seguintes sao -> %c\n",*s++); } return ptr; } else { while(*ptr !='\0') *ptr++; printf("caracter inexistente"); getchar(); exit(0); } } } main() { char s[40]; char ch; printf("Introduza Uma string\n"); fgets(s,40,stdin); printf("Introduza o caracter que pretende encontrar\n"); ch=getchar(); fflush(stdin); printf("o caracter %c foi detectado em %d",ch,strchr(s,ch)); putchar('\n'); system("PAUSE"); }
brink@ero Posted May 9, 2006 at 10:35 PM Report #26696 Posted May 9, 2006 at 10:35 PM A função fgets inclui o \n na string. Quando colocas a palara tiago e depois entre, fica na string: tiago\n\0. Para evitar isto, põe o \0 antes. Depois tens aqui um warning: printf("o caracter %c foi detectado em %d",ch,strchr(s,ch)); warning C4313: 'printf' : '%d' in format string conflicts with argument 2 of type 'char *' A função strchr devolve um *char char *strchr(char *s, char ch) E *++s; e *ptr++; Acho que o que tu queres é ++s; e ptr++; Mas agora não tenho muito tempo... Sobre a optimização, não sei, só passei por aqui, depois com tempo vejo isso melhor. Cumpr. brink@ero 🙂
brink@ero Posted May 11, 2006 at 09:16 AM Report #26826 Posted May 11, 2006 at 09:16 AM E *++s; e *ptr++; Acho que o que tu queres é ++s; e ptr++; Confirmado, o * não faz nada aí! Sobre o programa, ainda não faz a sua funcionalidade, ainda tens uns bugs. Cumpr. brink@ero :smoke:
Gurzi Posted May 11, 2006 at 01:42 PM Author Report #26868 Posted May 11, 2006 at 01:42 PM os asteriscos fazem mesmo falta... se não não corre..
Warrior Posted May 11, 2006 at 07:25 PM Report #26929 Posted May 11, 2006 at 07:25 PM Quando chegar a casa dou uma vista de olhos, o geshi colocou os { } e a identação toda nos sitios errados e ja troquei os olhos para tentar ler o codigo.
Warrior Posted May 11, 2006 at 08:18 PM Report #26959 Posted May 11, 2006 at 08:18 PM Testei o teu programa, e só encontra se ele tiver na primeira posição. Como eu resolveria: #include <stdio.h> #include <stdlib.h> #include <string.h> char *strchrm(char *s, char ch) { char *pts; for (pts=s;*pts!='\n' && *pts!=ch;pts++) ; if (*pts=='\n') { printf("Caracter inexistente\n"); system("pause"); exit(0); } else { for (s=pts,pts++;*pts!='\n';pts++) printf("Caracter seguinte: %c\n",*pts); return s; } } int main() { char s[40]; char ch; printf("Introduza Uma string\n"); fgets(s,40,stdin); printf("Introduza o caracter que pretende encontrar\n"); ch=getchar(); printf("O caracter %c foi detectado em %ld\n",ch,(long)strchrm(s,ch)); system("PAUSE"); return 0; }
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