Jump to content
Fórum Script Brasil
  • 0

Como Comparar caracter com vetor de strings


Binder

Question

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 to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 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];
       ............

Edited by mJi
Link to comment
Share on other 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 to comment
Share on other 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

Edited by mJi
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...