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)
|