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

Como Comparar caracter com vetor de strings


Binder

Pergunta

Olá Pessoal, estou com uma dúvida, gostaria de saber como comparar um caracter (digitado pelo usuario) se possui no meu vetor de string.

Pelo o que li a respeito a função strcmp compara apenas dois vetores ( de caracter ou inteiro)

Exemplo

//inteiro

vet.codigo == x

//string

vet.nome == letra // supondo que letra esteje declarada como vetor(letra[30]).

Meu código está assim:

struct dados {

int codigo;

char nome[30];

float n1,n2;

};

int main() {

dados vet[100];

int ultimo=0,i;

char achouletra;

printf("==================\n");

printf("informe primeira letra do nome:");

scanf("%c",&achouletra);

for(i=0;i<30;i++) // não sei se esse for esta correto

{

if(?) // como faço a comparação?

{

printf("codigo = %d\n",vet.codigo);

printf("nome = %s\n",vet.nome);

}

}

}

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Explica melhor isso ae. Se for um exercício, escreve a ordem dele, porque não deu pra entender quase nada.

É pra procurar um caractere numa string? String da estrutura?

Este caractere é a primeira letra da string?

Tu citaste a função strcmp. Ela serve para comparar dois vetores de char, pura e simplesmente. Ou seja, não dá pra usar ela para comparar um caractere com uma string, visto que uma string é uma cadeia de caracteres, não há sentido algum.

A forma mais comum de verificar se um caractere está presente numa string (e contar a frequencia com que ele aparece) é a seguinte:

cont = 0;
for(i=0, vet[i] != '\ 0';i++){
     if(vet[i] == letra){
          cont++;
     }
}
Onde: int i: variavel pras iterações do for; int cont: conta o numero de vezes que o caractere está na string. Deve ser inicializado com zero antes. char vet[] : vetor de char, ou seja, a string. É percorrida até o seu caractere nulo (até o fim); char letra: letra a ser procurada. Para aplicar este conceito aos vetores de char que estão na estrutura, não é dificil. Mesmo estando dentro da estrutura, continuam sendo vetores. Caso tu possa utilizar funções da biblioteca <string.h>, há várias que dizem respeito á busca de caracteres em strings. Poupa ter que percorrer as string, como fiz acima. Sobre o código que tu postou, se tu quiser declarar uma variavel do tipo de uma estrutura, a declaração correta é com a palavra 'struct' precedendo o nome da mesma e da variavel. Exemplo:
struct dados {
      int codigo;
      char nome[30];
      float n1,n2;
};

int main(){
     struct dados vet[100];
      .......
Se tu quiseres suprimir a declaração com 'struct', pode utilizar um typedef:
typedef struct {
      int codigo;
      char nome[30];
      float n1,n2;
} dados;

int main(){
     dados vet[100];
       ............

Editado por mJi
Link para o comentário
Compartilhar em outros sites

  • 0

Olá mJi,primeiramente obrigado por responder a minha dúvida, e peço desculpas por não ser tão claro quanto a mesma.Vou explicar mais

detalhamente. Preciso criar um programinha em C, com menus(coforme abaixo). Porém não estou conseguindo fazer os itens 7 e 8 do Menu.

Como está usando struct(estruturas) estou tendo uma certa dificuldade para fazer o FOR.Segue abaixo meus códigos da opção 7 e 8.

Desde já Agradeço pela ajuda.

Obs: Não posso utilizar funções do C "prontas". A variavel "ultimo" serve para percorrer o vetor apenas até a onde estiver preenchido

como ele é de 100 posiçoes, se eu preencher apenas 3 vezes, o laço FOR vai de 0 até 2, e não até o final do vetor.

================

opção 7: pede para localizar o nome no meu vetor, pela letra inicial que o usuario irá digitar.

Ex: "informe a letra" : 'a'. Todos nomes que começam com a letra 'a', deve ser localizado no meu vetor de char.

Não estou conseguindo fazer a busca.

opção 8: pede para localizar nome conforme a letra digitada pelo usuario.Independente da posição que ela está.

Ex: "Informe a letra" : 'a'.

Vetor [maria].

Achou a letra'a' na primeira(em c++ comeca com 0) e na ultima posição.

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

struct dados {

int codigo;

char nome[30];

float g1,g2;

};

int main() {

dados vet[100];

int op=0,ultimo=0,i,achoucodigo=0,achou=0,x,resultado,j,auxcodigo;

char achounome[30],achouletra,letra,auxnome[30];

float media=0;

printf("\n==========================================MENU=================================\n");

printf("1-Cadastrar aluno: \n");

printf("2-Listar todos alunos: \n");

printf("3-Listar aluno de codigo igual a: \n");

printf("4-Listar aluno acima da media 6: \n");

printf("5-lançar notas do aluno de codigo: \n");

printf("6-Listar aluno de nome igual a: \n");

printf("7-Listar alunos que iniciam com a letra: \n");

printf("8-Listar alunos que possua a letra...nome: \n");

printf("9-Ordenar os alunos pelo codigo: \n");

printf("10-Ordenar os alunos pelo nome: \n");

printf("11-Listar alunos de maior media: \n");

printf("12-Listar alunos que possuam g1 ou g2 no intervalo de notas entre: \n");

printf("13-Sair\n\n\n");

scanf("%d",&op);

Opção 7:

if(op==7)

{

printf("==================\n");

printf("informe primeira letra do nome:");

scanf("%c",&achouletra);

for(i=0;i<30;i++)

{

//if(?)

{

printf("codigo = %d\n",vet.codigo);

printf("nome = %s\n",vet.nome);

}

}

}

Opção 8:

if(op==8)

{

printf("==================\n");

printf("informe letra do nome que deseja encontrar:");

scanf("%c",&letra);

for(i=0;i<ultimo;i++)

{

if(letra == i)

{

printf("codigo = %d\n",vet.codigo);

printf("nome = %s\n",vet.nome);

}

}

}

Link para o comentário
Compartilhar em outros sites

  • 0

Opa, obrigado por especificar melhor.

Na opção 7, você deve percorrer todas as estruturas do tipo 'dados', e procurar nos vetores de char 'nome' o primeiro caractere (nome[0]). Se encontrar algum que bata com o caractere digitado pelo usuario, imprime na tela.

Siga esta logica:

for(i=0;i<ultimo;i++){
        if(vet[i].nome[0] == achouletra){
            printf("%s\n", vet[i].nome);
        }
    }
Interpretando: Percorre o vetor de dados atéo ultimo (como tu disseste), e se nome[0] for igual ao caractere pedido pelo usuario, imprime o nome. Na opção 8, a técnica é a mesma. Como tu não pode utilizar funções prontas (há uma função para esta tarefa), terás de percorrer cada estrutura de dados do vetor e também percorrer os nomes. Eis uma solução:
for(i=0;i<ultimo;i++){
        for(j=0;vet[i].nome[j] != '\ 0';j++){
            if(vet[i].nome[j] == achouletra){
                printf("%s\n", vet[i].nome);
                break;
            }
        }
    }

Interpretando:

Percorre cada nome de cada estrutura existente (até 'ultimo') até o caractere '\ 0' (este fórum esconde o \ 0, então coloquei um espaço entre a barra e o zero, mas na hora de compilar, junte-os).

Se encontrar o caractere no nome, imprime o nome e para de percorrer tal nome para passar para o nome da próxima estrutura. Não é necessário continuar a percorrer o nome se já achou a letra, não é mesmo?

O 'break' este loop que percorre o nome pare.

Não testei mas acredito que dê certo. Caso não der, siga a lógica que é mais ou menos por ae.

Ah, e ao postar códigos, coloque-os entre as tags de código: rte-code-button.png

Editado por mJi
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,3k
    • Posts
      652,4k
×
×
  • Criar Novo...