Ajuda na Linguagem C++

    Autor Mensagem
    vampirinha
    Veterano
    # set/10 · Editado por: vampirinha


    Olá pessoal tudo bem?
    A última vez que entrei no fórum foi pra pedir ajuda em Java e vcs me ajudaram ahahahhaha, agora será que poderiam me ajudar em C?

    Estou fazendo um programinha e estou precisando fazer uma função de busca.

    Eu tenho uma agenda e tenho alguns nomes nela como Maria, Joao, Carlos...

    e o usuário vai buscar por exemplo a letra A.
    Essa função teria que retornar esses tres nomes, já que todos eles tem a letra A...

    Procurei na net mas não achei alguma função para comparar cada letra de minha string.
    Função de comparação só conheço strcmp, mas ele compara a string inteira e retorna.

    Eu preciso de uma função semelhante, alguem conhece uma? Só que eu preciso comparar a palavra inteira, letra por letra.

    Bom, é um tópico bem nerd, mas se alguem me ajudar eu agradeço muito ^^

    Bog
    Veterano
    # set/10
    · votar


    vampirinha

    http://www.cplusplus.com/reference/string/string/find_first_of/

    (a última versão)

    Isso é para objetos da classe string. Se for para um array de char, eu não sei se tem pronto, mas é uma função bem simples de fazer. Basta usar um for que incrementa um pointer que olha para cada posição da string, se ele apontar para o caractere procurado, retorna true ou a posição do caractere, se encontrar um \0 ou percorrer um certo número de posições sem encontrar nada, retorna false ou um -1. ;)

    Bog
    Veterano
    # set/10
    · votar


    A propósito, SEMPRE tenha por perto a referência da linguagem. Não sei dos outros, mas eu não conheço de cor tudo o que tem nas bibliotecas padrão.

    vampirinha
    Veterano
    # set/10
    · votar


    Bog

    Tava pensando em fazer algo do tipo:

    bool clAgenda::BuscarContato(char cNome[41])
    {
    int i;

    for (ptrTrabalho = ptrPrimeiro; ptrTrabalho != 0; ptrTrabalho = ptrTrabalho->ptrProximo)
    {
    for (i = 0; i < strlen(ptrTrabalho->cNomeContato); i++)
    {
    if (strcmp(&ptrTrabalho->cNomeContato[i], cNome) == 0)
    {
    cout << "Contato: " << ptrTrabalho->cNomeContato << "\n\n";
    }
    }

    return true;
    }
    }

    Tenho que pensar melhor na função ^^

    vampirinha
    Veterano
    # set/10
    · votar


    Bog

    to trabalhando com lista ligada....enfim, não sei se é possivel fazer algo do tipo ahahahhaha, preciso pensar melhor, se tiver algum absurso ai no meio nao liga tah ahahhaha

    Bog
    Veterano
    # set/10 · Editado por: Bog
    · votar


    vampirinha

    Rápidos comments:

    char cNome[41]

    Cuidado com esse 41 mágico aí. Conforme o programa cresce, esses números mágicos podem se tornar fontes de bugs indecifráveis. É melhor usar um parâmetro, que pode ser lido de um arquivo de configuração, ou pelo menos algo com um apelido (dado por um #define).

    to trabalhando com lista ligada

    C++ tem uma classe list na biblioteca padrão. ;)

    for (i = 0; i < strlen(ptrTrabalho->cNomeContato); i++)

    Aqui você vai percorrer cada letra do cNomeContato, certo?

    Dica: esse strlen é meio tosco. Apesar de não existirem regras para como ele é implementado, ele normalmente já percorre todas as posições da string uma vez, só para achar o primeiro \0. Pior ainda: dependendo de como for o compilador, o teu programa vai chamar esse strlen a CADA ITERAÇÃO do for, porque você colocou ele na condição. Isso é meio lerdo - claro, num programinha simples não faz diferença, mas conforme a coisa complica, pode ser uma fonte de lerdeza desnecessária.

    Por isso, o que você pode fazer é testar pelo fim da string no teu próprio código ao mesmo tempo em que procura o tal do caracter. Ou... (continue lendo)

    if (strcmp(&ptrTrabalho->cNomeContato[i], cNome) == 0)

    O que exatamente você está fazendo aqui? cNome é um char []. mas cNomeContato [i] é um char, imagino eu. Você queria procurar uma substring ou um caractere, afinal de contas? E por que você não usa logo a classe string em vez de arrays de chars? Ela já tem uma função que busca uma substring (ou um caractere, tá ali na referência do link). Dá bem menos trabalho! =P

    Bog
    Veterano
    # set/10
    · votar


    (vou dormir, boa noite)

      Enviar sua resposta para este assunto
              Tablatura   
      Responder tópico na versão original
       

      Tópicos relacionados a Ajuda na Linguagem C++