Ir ao conteúdo

C como retornar um vetor para main


Ir à solução Resolvido por arfneto,

Posts recomendados

Postado

preciso fazer um exercicio onde preciso criar uma funcao que gere um vetor(que seja a contagem de letras de cada palavra de um string), e imprimir e manipular esse vetor fora da funcao. não sei como passar o vetor para minha funcao principal. a funcao recebe um string e preciso devolver o vetor.

Criar uma segunda função para contar quantas letras tem em cada palavra da string, armazenando essa contagem em um vetor passado por parâmetro para a função (esse vetor terá como tamanho o número de palavras da string).

 

codigo

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int contadorL(char string[100]);
int contadorP(char string[100]);

main(void){
    char string[100], rep;
    int matriz[contadorP(string)][2], i, j, vet[contadorP(string)];

        printf("informe uma string: ");
        gets(string);
        printf("A string tem %d palavras", contadorP(string));
        printf("\n=== VETOR ===\n");
        for(i=0;i<contadorP(string);i++){
        vet[i]=contadorL(string);
        printf("%d\t", vet[i]);
        }
        printf("\n=== MATRIZ ===\n");
        printf("VALOR    QTDE DIVISORES");
        for(i=0;i<contadorP(string);i++){
            for(j=0;j<2;j++){

            }
        }


}

int contadorP(char string[100]){
    int cont=0, i=0, x=0;
     while(string[i] != '\0')
        {
            if(string[i] != ' ' && x == 0)
            {
                cont++;
                x = 1;
            }
            else if(string[i] == ' ')
            {
                x = 0;
            }
            i++;
        }
        return(cont);
}
int contadorL(char string[100]){
    int i, cont, j, vet[contadorP(string)];
    j=0;
    i=0;
    cont=0;
    while(string[i] != '\0'){
        cont++;
        if(string[i]==' ' ){
          vet[j]=cont-1;
          cont=0;
            j++;
          }
          if(string[i+1]=='\0'){
            vet[j]=cont;
          cont=0;
            j++;
          }
          i++;
    }
    return(vet[i]);
}

 

Postado
31 minutos atrás, Nelsonderocha disse:

preciso fazer um exercicio onde preciso criar uma funcao que gere um vetor(que seja a contagem de letras de cada palavra de um string), e imprimir e manipular esse vetor fora da funcao. não sei como passar o vetor para minha funcao principal. a funcao recebe um string e preciso devolver o vetor.

 

funções existem exatamente para isso, retornar coisas.

 

int contadorL(char string[100]);
int contadorP(char string[100]);

 

Essas que declarou retornam um único int. 

 

Apenas retorne um ponteiro para o vetor, o popular int*

 

Mas note que nem sempre se sabe o tamanho do vetor. No seu caso o tamanho é o total de palavras  na string, e vai precisar ser conhecido antes de criar o vetor.  A outra opção seria determinar pelo máximo. Como são 100 posições não pode ter mais de 50 strings, certo?

 

Quanto a gerar o vetor vai precisar alocar memória para ele. 

 

Use nomes mais expressivos... cLetras() é melhor que contadorL() porque a distinção é o que vale: qual função conta o que...

 

NUNCA use gets()

 

Declare as variáveis de controle do loop DENTRO do for.

 

Não declare mais de uma variável por linha. É grátis e só vai te ajudar.

 

   int i, cont, j, vet[contadorP(string)];


Isso acima não funciona. Deve declarar o vetor com um tamanho conhecido, constante. Ou alocar memória.

 

E é mais esperto contar as letras dentro da função que conta as palavras. Vai ler tudo duas vezes?

 

Precisa listar as plalvras?

 

 

 

 

Postado
39 minutos atrás, arfneto disse:

 

funções existem exatamente para isso, retornar coisas.

 

int contadorL(char string[100]);
int contadorP(char string[100]);

 

Essas que declarou retornam um único int. 

 

Apenas retorne um ponteiro para o vetor, o popular int*

 

Mas note que nem sempre se sabe o tamanho do vetor. No seu caso o tamanho é o total de palavras  na string, e vai precisar ser conhecido antes de criar o vetor.  A outra opção seria determinar pelo máximo. Como são 100 posições não pode ter mais de 50 strings, certo?

 

Quanto a gerar o vetor vai precisar alocar memória para ele. 

 

Use nomes mais expressivos... cLetras() é melhor que contadorL() porque a distinção é o que vale: qual função conta o que...

 

NUNCA use gets()

 

Declare as variáveis de controle do loop DENTRO do for.

 

Não declare mais de uma variável por linha. É grátis e só vai te ajudar.

 

   int i, cont, j, vet[contadorP(string)];


Isso acima não funciona. Deve declarar o vetor com um tamanho conhecido, constante. Ou alocar memória.

 

E é mais esperto contar as letras dentro da função que conta as palavras. Vai ler tudo duas vezes?

 

Precisa listar as plalvras?

 

 

 

 

muito obrigado, perdao pelo meu desconhecimento mas estou com dificuldade em corrigir o codigo, poderia me ajudar, não sei usar ponteiros e *

quanto a funcao, eh necessario que crie 2 para o exercicio.

Postado
40 minutos atrás, Nelsonderocha disse:

muito obrigado, perdao pelo meu desconhecimento mas estou com dificuldade em corrigir o codigo, poderia me ajudar, não sei usar ponteiros e *

quanto a funcao, eh necessario que crie 2 para o exercicio

 

Mas você criou as duas...

Tem um enunciado mais preciso? Não respondeu a nada do que eu perguntei e também não perguntou nada...

 

O que precisa fazer? Tem que listar as palavras?

Postado

@arfneto Ler uma string com até 100 caracteres e fazer uma função que receba a string e retorne quantas palavras tem na string. Criar uma segunda função para contar quantas letras tem em cada palavra da string, armazenando essa contagem em um vetor passado por parâmetro para a função (esse vetor terá como tamanho o número de palavras da string). Na sequência, criar uma matriz com 2 colunas e o número de linhas igual ao tamanho do vetor. Na primeira coluna da matriz armazenar o elemento do vetor e na segunda coluna da matriz armazenar a quantidade de divisores que esse elemento tem.

Postado
2 horas atrás, Nelsonderocha disse:
 while(string[i] != '\0'){

 

'\0' é a mesma coisa que 0. Pra que escrever 4 caracteres ao invés de 1?

 

Como eu disse antes, escreva em torno dos dados.

 

Nunca escreva um programa interativo. Só vai perder tempo. Muito tempo.

 

28 minutos atrás, Nelsonderocha disse:

Ler uma string com até 100 caracteres e fazer uma função que receba a string e retorne quantas palavras tem na string.

 

Essa você declarou
 

int contadorP(char string[100]){
    int cont=0, i=0, x=0;
     while(string[i] != '\0')
        {
            if(string[i] != ' ' && x == 0)
            {
                cont++;
                x = 1;
            }
            else if(string[i] == ' ')
            {
                x = 0;
            }
            i++;
        }
        return(cont);
}

 

E está de acordo com o enunciado. Porque não escreve e testa essa primeiro????

 

Criar uma segunda função para contar quantas letras tem em cada palavra da string, armazenando essa contagem em um vetor passado por parâmetro para a função (esse vetor terá como tamanho o número de palavras da string).

 

Essa você declarou
 

int contadorP(char string[100]){
    int cont=0, i=0, x=0;
     while(string[i] != '\0')
        {
            if(string[i] != ' ' && x == 0)
            {
                cont++;
                x = 1;
            }
            else if(string[i] == ' ')
            {
                x = 0;
            }
            i++;
        }
        return(cont);
}

 

E não pode estar certo. Onde está o vetor que é pra ser passado como parâmetro???


 

Citação

 

Na sequência, criar uma matriz com 2 colunas e o número de linhas igual ao tamanho do vetor


 

 

Isso eu não entendi. É o mesmo vetor de antes? qual deles?

 

 

Postado
30 minutos atrás, arfneto disse:

 

'\0' é a mesma coisa que 0. Pra que escrever 4 caracteres ao invés de 1?

 

Como eu disse antes, escreva em torno dos dados.

 

Nunca escreva um programa interativo. Só vai perder tempo. Muito tempo.

 

 

Essa você declarou
 

int contadorP(char string[100]){
    int cont=0, i=0, x=0;
     while(string[i] != '\0')
        {
            if(string[i] != ' ' && x == 0)
            {
                cont++;
                x = 1;
            }
            else if(string[i] == ' ')
            {
                x = 0;
            }
            i++;
        }
        return(cont);
}

 

E está de acordo com o enunciado. Porque não escreve e testa essa primeiro????

 

Criar uma segunda função para contar quantas letras tem em cada palavra da string, armazenando essa contagem em um vetor passado por parâmetro para a função (esse vetor terá como tamanho o número de palavras da string).

 

Essa você declarou
 

int contadorP(char string[100]){
    int cont=0, i=0, x=0;
     while(string[i] != '\0')
        {
            if(string[i] != ' ' && x == 0)
            {
                cont++;
                x = 1;
            }
            else if(string[i] == ' ')
            {
                x = 0;
            }
            i++;
        }
        return(cont);
}

 

E não pode estar certo. Onde está o vetor que é pra ser passado como parâmetro???


 

 

Isso eu não entendi. É o mesmo vetor de antes? qual deles?

 

 

a funcao para contar a letra de cada palavra e colocar em um vetor foi essa, mas n sei como passar o vetor como parametro 

int contadorL(char string[100]){
    int i, cont, j, vet[contadorP(string)];
    j=0;
    i=0;
    cont=0;
    while(string[i] != '\0'){
        cont++;
        if(string[i]==' ' ){
          vet[j]=cont-1;
          cont=0;
            j++;
          }
          if(string[i+1]=='\0'){
            vet[j]=cont;
          cont=0;
            j++;
          }
          i++;
    }
    return(vet[i]);

e a matriz ainda não tinha feito pois precisa usar o vetor das letras

  • Solução
Postado
9 horas atrás, Nelsonderocha disse:

a funcao para contar a letra de cada palavra e colocar em um vetor foi essa, mas n sei como passar o vetor como parametro 

 

int contadorL(char string[100]);

 

10 horas atrás, arfneto disse:

Criar uma segunda função para contar quantas letras tem em cada palavra da string, armazenando essa contagem em um vetor passado por parâmetro para a função (esse vetor terá como tamanho o número de palavras da string).

 

 

Está faltando o vetor, então você coloca o vetor... 

 

    int cLetras( char* string[], int vetor[] );

 

O enunciado é ruim e o problema não está bem formulado. Isso dá margem a alguma interpretação e pode facilitar as coisas.

 

"O tamanho do vetor deve ser o número de palavras da string"

 

Isso não faz sentido para a função, porque ela só vai receber o endereço de início, é um programa em C. Tanto faz se o vetor tem 50 ou 50.000 palavras. Como não sabe também quantas palavras tem na string também não pode declarar o vetor fixo. Claro que pode ter no máximo 50 strings nesse caso, mas é o que temos.

 

Então acho que o melhor que pode fazer é passar o tamanho e o vetor, declarando

 

    int cLetras( char* string[], int vetor[], int tamanho );

// ou o equivalente

    int cLetras( char* string[], int* vetor, int tamanho );

 

Claro que no mundo real essa conta seria feita ao mesmo tempo, já que pouco sentido faz varrer duas vezes a string onde estão as palavras e as letras :) 

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!