Jump to content
Fórum Script Brasil
  • 0

ponteiro string


thematrix

Question

olá amigos, estou tentando resolver um algoritmo, já fiz ele que meio todo, mas estão acontecendo alguns erros, por exemplo, este algoritmo funciona da seguinte maneira, e passado caracteres (aluno=Wesley) em uma função e esta funcão recebe um ponteiro, o programa devera exibir apenas o nome wesley, a posição em que se encontra o = e o tamanho da string completa, tudo com o uso de funções. so que quando e compilado ele apenas mostra a numero que se encontro o igual no ponteiro e o numero da string completa. agradeço a ajuda desde já. segue o código a baixo.

ps : ide code:blocks

#include<stdlib.h>
#include<string.h>

int getpos(char *str);
char valor(char *str);
int gettam(char *tamanho);
char nome(char *str);

int main()
{
   char *prinome;
   char *ultnome;
   int posicao;
   int tamanho;

    posicao = getpos("aluno=Wesley");
    printf("campo = %d\n",posicao);
    tamanho= gettam("aluno=Wesley");
    printf("campo = %d\n",tamanho);
    *ultnome = valor("aluno=Wesley");
    printf("ultimo nome = %c \n",*ultnome);
    *prinome = nome("aluno=Wesley");
    printf("ultimo nome = %c \n",*prinome);
    system("pause");
}

int getpos(char *str)
{
    int resp=0;
    int i=0;
    while(str[i] !=  '='){ //calcula a posicão do igual "="
    resp++;
    i++;
    }
    return resp;

}
char valor(char *str){
     char *resp;
     int i;
     int posx = getpos(str);
     int tamx = gettam(str);                 //armazena o segundo nome
     for (i=(posx+1);i<tamx;i++){
         resp[i] = str[i];
     }
     return *resp;
}
int gettam(char *tamanho){
    int resp=0;
    while(tamanho[resp] != ''){       //calcula o tamanho da string
    resp++;}
    return resp;
}
char nome(char *str){
    char *resp;
    int i;
    int posx = getpos(str);                    //armazena o primeiro nome
    for(i=0;i<posx;i++){
        resp[i]=str[i];
    }
    return *resp;
}

Edited by kuroi
Adicionar tag CODE
Link to comment
Share on other sites

5 answers to this question

Recommended Posts

  • 0

Faltou um

#include <stdio.h>
Para descobrir o tamanho, está certinho até, mas você deve pensar sobre o fato de o caractere nulo final fazer ou não parte da string...
int gettam(char *tamanho){
    int resp=0;

    while(tamanho[resp++] != '\ 0');
    return(resp-1);
}
Para descobrir a posição do sinal de igual, não há a necessidade de usar uma segunda variável, você poderia até mesmo usar a variável de controle -1. Mas isso vai do estilo de cada um...
int getpos(char *str){
    int i=0;

    while(str[i++] != '=');
    return(i-1);
}

Para retornar o nome "Wesley", o que eu recomendo é percorrer o vetor até encontrar o sinal de igual, e retornar o endereço desde sinal + 1. Depois, basta dar um 'printf()' neste endereço que ele irá printar a string até o caractere nulo. É a maneira mais rápida e eficiente de se fazer isto.

Caso não saibas como retornar ponteiros, pesquise sobre o assunto. Ainda, em seu código, você tentou exibir a string com %c. Isto é para caracteres. Para strings, é %s.

Este eu deixo para você.

Link to comment
Share on other sites

  • 0

pois é, compilo o programa e ele me retorna o valor de igual e o tamanho da frase, mas no bloco de comando da funcao valor para retornar apenas o segundo nome ocorre segmentation fault.

char valor(char *str){ //armazena o segundo nome

char *resp;

int i;

int posx = getpos(str);//armazena em posx a posicao do =

int tamx = gettam(str); // armazena tamanho da string em posicao do

for (i=(posx+1);i<tamx;i++){

resp = str;

}

return *resp;

ou seja i recebe o valor 5+1 que e no caso a Letra depois do = , e tamx recebe 12 que e o ultimo elemento da frase no caso y, e ele compara, em quanto i = 6 (que e a posicao do igual) e for menor que tamx (12) , resp ira receber o caracteres de *str; para mim a logica ta certa, o programa nem da erro de compilação, mas na hora de retornar resp ele da segmentation falut

Link to comment
Share on other sites

  • 0

apos muitas tentativas consegui, mas so me retorna a letra W e no caso como e um vetor de caracteres tenho que usar o %c, usando %s da erro.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char fun(char *p);

main()
{
    char *p;
     p = fun("Aluno=Wesley");
     printf("%c",p);
}
char fun(char *p){
   char *resp;
   int i=0;
   while(p[i++] == '='){
       resp = p[i];
   }
   for(i=6;i<12;i++){
       return p[i];
   }


}

Edited by kuroi
Adicionar tag CODE
Link to comment
Share on other sites

  • 0

a funcao fun() esta declarada como char, sendo assim ela só ira retornar 1 caracter. pra retornar uma string teria q ser char*.

agora, você não pode fazer funcoes q retornam string, a não ser q aloque dinamicamente o espaco de retorno e desaloque mais tarde.

se quer retornar uma string, ela deve ser passada por referencia e alterada dentro da funcao.

mas no caso do exercicio, o melhor não seria retornar a posicao onde comeca o nome e imprimir a string original (com "%s"), a partir dessa posicao??

Link to comment
Share on other sites

  • 0

é tentando tentando que se consegue, bom tive quer ler bastante mas consegui eis ai o código:

#include<stdlib.h>
#include<string.h>
#include<stdio.h>

int getpos(char *str);
char *valor(char *str);
int gettam(char *tamanho);
char *nome(char *str);

int main()
{
   char *prinome;
   char *ultnome;
   int posicao;
   int tamanho;

    posicao = getpos("aluno=Wesley");
    printf("posicao do igual e = %d\n",posicao);
    tamanho= gettam("aluno=Wesley");
    printf("tamanho da frase = %d\n",tamanho);
    ultnome = valor("aluno=Wesley\n");
    printf("segundo nome = %s",ultnome);
    prinome = nome("aluno=Wesley");
    printf("primeiro nome = %s",prinome);
}
int getpos(char *str)
{
    int resp=0;
    int i=0;
    while(str[i] !=  '='){ //calcula a posicão do igual "="
    resp++;
    i++;
    }
    return resp;
}
char *valor(char *str){
     char temp[255];
     char *resp;
     resp = temp;
     int i,j=0;
     int pos = getpos(str);
     int tam = gettam(str); //armazena o segundo nome
     for (i=(pos+1);i<tam;i++){
         resp[j++] = str[i];
     }
     resp[j] = ''; \\ tem que colocar um barra \ 0 que não apareceu 
     return resp;
}
int gettam(char *tamanho){
    int resp=0;
    while(tamanho[resp] != ''){ //calcula o tamanho da string
    resp++;}
    return resp;
}
char *nome(char *str){
    char *resp;
    char temp[255];
    resp = temp;
    int i,j=0;
    int posx = getpos(str);                    //armazena o primeiro nome
    for(i=0;i<posx;i++){
        resp[j++] = str[i];
    }
    resp[j] = ''; \\ tem que colocar um barra \ 0 que não apareceu 
    return resp;
}

Edited by kuroi
Adicionar tag CODE
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...