Neji 0 Denunciar post Postado Março 24, 2013 Ola Boa tarde,Tenho os seguintes parâmetros char* search(char* palavra,char*texto ) {}eu sei como ir buscar o tamanho do array palavra e array texto neste caso array palavra tem o tamanho i,e o array texto tem o tamanho j.o que eu quero é encontrar no array texto a palavra do array palavra. e caso tenha encontrado devolver a posição onde começa no array texto.por exemplo palavra=JOAO J na posicao 0 O na posição 1 e assim sucessivamente e no array texto =blableaJOAOblablaJOAOBLABLA neste caso aparece 2 vezes no array texto então devolve a posição 8 e a posição 18 que são onde começam. não sei se me expliquei bem. já agora não quero usar funções predefinidas Obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
MafnGamer 13 Denunciar post Postado Março 24, 2013 Você tem um array com palavras ou uma array com letras que formam uma palavra? Compartilhar este post Link para o post Compartilhar em outros sites
Neji 0 Denunciar post Postado Março 24, 2013 Você tem um array com palavras ou uma array com letras que formam uma palavra? Um array com letras que formam uma palavra. Ambos são assim. ja tentei uma coisa do genero. char* pos(char* C,char* S) { int cont=0; int b; int total=0; int n=0; int m=0; char buffer[1024] = {0}; int s=0; int i; int j; char texto[100]; m=sprintf (buffer, "%s", C);// tamanho do array c n=sprintf (buffer, "%s", S);// tamanho do array S n=n-1; //menos 1 por causa do input for(i=0;i<=n;i++) { if(cont==m) { texto[s++]=i-m; j=0; total++; } if(C[j]==S[i]){ for(j=0;j<=m;j++){ if(C[j]==S[i]) { cont++; i++; } else { cont=0; i++; total++; } } } } for (b=0;b<=total;b++) { printf("%d\n",texto[b]); } return 0; } mas não da :/ Compartilhar este post Link para o post Compartilhar em outros sites
MafnGamer 13 Denunciar post Postado Março 24, 2013 Bem não entendi muito bem para que você que essa função mas creio eu que já exista funções para sortear itens em arrays. Compartilhar este post Link para o post Compartilhar em outros sites
Neji 0 Denunciar post Postado Março 24, 2013 Já consigo encontrar mas, não consigo encontrar a posição seguinte. char* pos(char* C,char* S) { int b=0; int total=0; int n=0; int m=0; char buffer[1024] = {0}; int s=0; int i; int j; int cont=0; char texto[100]; m=sprintf (buffer, "%s", C);// tamanho do array c n=sprintf (buffer, "%s", S);// tamanho do array S n=n-1; //menos 1 por causa do input for(i=0;i<n;i++) { j=0; if(total==m){ texto[s++]=i-m; } if(j==m) { j=0; cont++; } if(C[j]==S[i]) { for(j=0;j<m;j++) { if(C[j]==S[i]) { i++; total++; } else { total=0; j=m; } } } } for(b=0;b<=2;b++) { printf("%d\n",texto[b]); } return 0; } Bem não entendi muito bem para que você que essa função mas creio eu que já exista funções para sortear itens em arrays. eu na quero sortear eu quero através de um array x com m elementos e um array y com n elementos, encontrar o elemento de x em y. o problema e que por exemplo o nome Joana não esta todo na posição [0] mas sim em todos os elementos do array x e de igual modo para o array y, mas em y tem muitos mais elementos, sendo que tenho que comparar posição a posição. Compartilhar este post Link para o post Compartilhar em outros sites
ScreenBlack 13 Denunciar post Postado Março 25, 2013 Já existe uma função que faça isso. É a "strstr()" da biblioteca "string.h". Exemplo: #include <stdlib.h> #include <stdio.h> #include <string.h> char* pos(char* C,char* S) { return strstr(C, S); } int main(void) { char palavra[] = "JOAO"; char texto[] = "blableaJOAOblablaJOAOBLABLA"; char *posicao = texto; char qtdEncontrada = 0; while(1) { posicao = pos(posicao, palavra); if (posicao == NULL) break; qtdEncontrada++; posicao = &posicao[strlen(palavra)]; } printf("Palavra encontrada %d veze(s)\n", qtdEncontrada); return (0); } Compartilhar este post Link para o post Compartilhar em outros sites
Neji 0 Denunciar post Postado Março 25, 2013 Já existe uma função que faça isso. É a "strstr()" da biblioteca "string.h". Exemplo: #include <stdlib.h> #include <stdio.h> #include <string.h> char* pos(char* C,char* S) { return strstr(C, S); } int main(void) { char palavra[] = "JOAO"; char texto[] = "blableaJOAOblablaJOAOBLABLA"; char *posicao = texto; char qtdEncontrada = 0; while(1) { posicao = pos(posicao, palavra); if (posicao == NULL) break; qtdEncontrada++; posicao = &posicao[strlen(palavra)]; } printf("Palavra encontrada %d veze(s)\n", qtdEncontrada); return (0); } Preciso fazer sem usar funções pré definidas, de qualquer modo obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
ScreenBlack 13 Denunciar post Postado Março 25, 2013 Re-inventando o "strstr()": char* pos(char* C,char* S) { char *posicao = C; unsigned int i = 0; while(1) { if( posicao[0] == S[0] ) // Busca posicão que iguala a primeira letra da palavra { for (i = 0; i < strlen(S); i++) // Verifica se as demais letras são iguais { if(posicao != S) // Se encontrar diferente, zera o "i" e cancela o "for()" { i = 0; break; } } if( i == strlen(S) ) // Se não houver diferença, "i" e "strlen()" terão o mesmo tamanho return &posicao[0]; } if( posicao[1] != '\0' ) // Enquanto não chegar no final do texto, "posicao" irá pra posição do vetor. posicao = &posicao[1]; else return NULL; } } Compartilhar este post Link para o post Compartilhar em outros sites
Neji 0 Denunciar post Postado Março 25, 2013 Re-inventando o "strstr()": char* pos(char* C,char* S) { char *posicao = C; unsigned int i = 0; while(1) { if( posicao[0] == S[0] ) // Busca posicão que iguala a primeira letra da palavra { for (i = 0; i < strlen(S); i++) // Verifica se as demais letras são iguais { if(posicao != S) // Se encontrar diferente, zera o "i" e cancela o "for()" { i = 0; break; } } if( i == strlen(S) ) // Se não houver diferença, "i" e "strlen()" terão o mesmo tamanho return &posicao[0]; } if( posicao[1] != '\0' ) // Enquanto não chegar no final do texto, "posicao" irá pra posição do vetor. posicao = &posicao[1]; else return NULL; } } tive a testar e não funcionou só troquei o strlen pois estou a usar outro método auxiliar já que não posso usar funções isso não me retorna nada apenas continuo a escrever na consola e não me retorna nada... Compartilhar este post Link para o post Compartilhar em outros sites
ScreenBlack 13 Denunciar post Postado Março 25, 2013 Re-inventando o "strstr()" e o "strlen()": unsigned int getSize(char *texto) { int i = 0; while( texto != '\0' ) i++; return i; } char* pos(char* C,char* S) { char *posicao = C; unsigned int i = 0; while(1) { if( posicao[0] == S[0] ) // Busca posicão que iguala a primeira letra da palavra { for (i = 0; i < getSize(S); i++) // Verifica se as demais letras são iguais { if( posicao != S ) // Se encontrar diferente, zera o "i" e cancela o "for()" { i = 0; break; } } if( i == getSize(S) ) // Se não houver diferença, "i" e "strlen()" terão o mesmo tamanho return &posicao[0]; } if( posicao[1] != '\0' ) // Enquanto não chegar no final do texto, "posicao" irá pra posição do vetor. posicao = &posicao[1]; else return NULL; } } Compartilhar este post Link para o post Compartilhar em outros sites
Neji 0 Denunciar post Postado Março 25, 2013 Re-inventando o "strstr()" e o "strlen()": unsigned int getSize(char *texto) { int i = 0; while( texto[i] != '\0' ) i++; return i; } char* pos(char* C,char* S) { char *posicao = C; unsigned int i = 0; while(1) { if( posicao[0] == S[0] ) // Busca posicão que iguala a primeira letra da palavra { for (i = 0; i < getSize(S); i++) // Verifica se as demais letras são iguais { if( posicao[i] != S[i] ) // Se encontrar diferente, zera o "i" e cancela o "for()" { i = 0; break; } } if( i == getSize(S) ) // Se não houver diferença, "i" e "strlen()" terão o mesmo tamanho return &posicao[0]; } if( posicao[1] != '\0' ) // Enquanto não chegar no final do texto, "posicao" irá pra posição do vetor. posicao = &posicao[1]; else return NULL; } } Nao funciona, tive de tirar o while(1) para me devolver valores. Mas de qualquer modo devolve me sempre 0. Compartilhar este post Link para o post Compartilhar em outros sites
ScreenBlack 13 Denunciar post Postado Março 25, 2013 Muito estranho. o código aqui funcionou. Vou postar ele completo: #include <stdlib.h> #include <stdio.h> #include <string.h> unsigned int getSize(char *texto) { int i = 0; while( texto[i] != '\0' ) i++; return i; } char* pos(char* C,char* S) { char *posicao = C; unsigned int i = 0; while(1) { if( posicao[0] == S[0] ) // Busca posicão que iguala a primeira letra da palavra { for (i = 0; i < getSize(S); i++) // Verifica se as demais letras são iguais { if( posicao[i] != S[i] ) // Se encontrar diferente, zera o "i" e cancela o "for()" { i = 0; break; } } if( i == getSize(S) ) // Se não houver diferença, "i" e "strlen()" terão o mesmo tamanho return &posicao[0]; } if( posicao[1] != '\0' ) // Enquanto não chegar no final do texto, "posicao" irá pra posição do vetor. posicao = &posicao[1]; else return NULL; } } int main(void) { char palavra[] = "JOAO"; char texto[] = "blableaJOAOblablaJOAOBLABLA"; char *posicao = texto; char qtdEncontrada = 0; while(1) { posicao = pos(posicao, palavra); if (posicao == NULL) break; qtdEncontrada++; posicao = &posicao[strlen(palavra)]; } printf("Palavra encontrada %d veze(s)\n", qtdEncontrada); return (0); } Compartilhar este post Link para o post Compartilhar em outros sites
Neji 0 Denunciar post Postado Março 25, 2013 Muito estranho. o código aqui funcionou. Vou postar ele completo: #include <stdlib.h> #include <stdio.h> #include <string.h> unsigned int getSize(char *texto) { int i = 0; while( texto[i] != '\0' ) i++; return i; } char* pos(char* C,char* S) { char *posicao = C; unsigned int i = 0; while(1) { if( posicao[0] == S[0] ) // Busca posicão que iguala a primeira letra da palavra { for (i = 0; i < getSize(S); i++) // Verifica se as demais letras são iguais { if( posicao[i] != S[i] ) // Se encontrar diferente, zera o "i" e cancela o "for()" { i = 0; break; } } if( i == getSize(S) ) // Se não houver diferença, "i" e "strlen()" terão o mesmo tamanho return &posicao[0]; } if( posicao[1] != '\0' ) // Enquanto não chegar no final do texto, "posicao" irá pra posição do vetor. posicao = &posicao[1]; else return NULL; } } int main(void) { char palavra[] = "JOAO"; char texto[] = "blableaJOAOblablaJOAOBLABLA"; char *posicao = texto; char qtdEncontrada = 0; while(1) { posicao = pos(posicao, palavra); if (posicao == NULL) break; qtdEncontrada++; posicao = &posicao[strlen(palavra)]; } printf("Palavra encontrada %d veze(s)\n", qtdEncontrada); return (0); } mandei mensagem. Compartilhar este post Link para o post Compartilhar em outros sites
GBecker 51 Denunciar post Postado Março 25, 2013 Está me parecendo que você já não quer AJUDA, e sim a RESPOSTA para o seu problema... Compartilhar este post Link para o post Compartilhar em outros sites
Neji 0 Denunciar post Postado Março 25, 2013 Está me parecendo que você já não quer AJUDA, e sim a RESPOSTA para o seu problema... A diferença entre pedir ajuda e pedir a resposta é que quem pede ajuda faz alguma coisa para acabar o problema quem pede apenas a resposta fica sentado a espera que os outros façam por si, eu ja tinha muita coisa feita mas o meu processo estava mal e confuso a única coisa que eu pedi aqui foi o algoritmo que eu não consigo mesmo fazer, é preciso muita lata para você dizer isso quando eu estou a tentar resolver o problema há 2 dias e pouco dormi. Compartilhar este post Link para o post Compartilhar em outros sites
guidjos 65 Denunciar post Postado Março 26, 2013 Eu sugiro começar pensando na interface da sua função. Sugiro que reconsidere seus parâmetros e tipo de retorno. Isto requer refinamento da definição de seu problema. Se eu tivesse que escrever a função, usaria o seguinte tipo: unsigned int list_occurr(const char *haystack, const char *needle, size_t *indices, size_t max); A função retorna um número inteiro maior ou igual a 0, correspondente à quantidade de vezes que `needle` ocorre em `haystack`. Os índices em si são armazenados no vetor para o primeiro elemento do qual `indices` aponta. A função armazenará até `max` índices no array de índices encontrados. A função não modifica `haystack` e nem `needle`. Veja se consegue escrever esta função. Compartilhar este post Link para o post Compartilhar em outros sites
Mateus GP 13 Denunciar post Postado Março 27, 2013 #include <stdio.h>intscmp (const char* s1, const char* s2){ while(*s1 == *s2++) if(*s1++ == '\0') return 0; return 1;}char*search (const char* s, const char* w){ while(*s != '\0') { if(*s == *w) if(scmp(s, w)) return (char*) s; s++; } return NULL;}intmain (int argc, char** argv){ const char tx[] = "blableaJOAOblablaJOAOBLABLA", wx[] = "JOAO"; const char* s = tx; while((s = search(s, wx)) != NULL) { printf("%s\t%d\n", s, s - tx); s += sizeof(wx); } return 0;} Cometi um erro na função scmp. Correção: intscmp (const char* s1, const char* s2){ while(*s2 != '\0') if(*s2++ != *s1++) return 0; return 1;} Compartilhar este post Link para o post Compartilhar em outros sites