Ir para conteúdo
Fórum Script Brasil
  • 0

ponteiro string


thematrix

Pergunta

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

Editado por kuroi
Adicionar tag CODE
Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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];
   }


}

Editado por kuroi
Adicionar tag CODE
Link para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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;
}

Editado por kuroi
Adicionar tag CODE
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...