Jump to content

devolve endereço de memoria e chars sguintes


Recommended Posts

Posted

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");

}
Posted

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 🙂

Posted

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;
}

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.