Jump to content

Exercício encontrar palavras - Ponteiros e arrays


David Rego
 Share

Recommended Posts

Boa tarde, estou com uma dúvida num exercício.

O exercício é este:

Considere que pretende resolver um quebra-cabeças que surgiu no seu jornal. Existe um rectângulo, com um determinado número de linhas e um determinado número de colunas, preenchido com caracteres alfabéticos em cada uma das suas posições. Na figura pode ver um exemplo para um quebra cabeças com 5 linhas e 6 colunas.

e  b a u  l q

l  e r  r  s s

u w u q g r

a a  l  l  u a

p m h u d j

Desenvolva uma função que procure todas as ocorrências de uma determinada palavra no quebra cabeças. A palavra pode ocorrer numa linha ou numa coluna. De cada vez que a função encontrar uma ocorrência da palavra deve escrever no monitor o número da linha e da coluna em que a palavra tem início. Considerando o exemplo da figura, se a palavra a pesquisar for lua a função deveria escrever:

A palavra lua surge:

- Ao longo da coluna 0 com inicio na linha 1

- Ao longo da linha 3 com inicio na coluna 3

A função recebe como argumentos o endereço inicial da matriz de caracteres, as suas dimensões (n.º de linhas e de colunas) e um ponteiro para a palavra a pesquisar.

Alguém sabe como resolver isto?

Link to comment
Share on other sites

Já tens alguma coisa feita?

É algo relativamente trivial se usares as função certas. Uma função que te pode dar muito jeito neste caso é a strstr() que dada uma string S e uma substring P te indica se P existe em S.

A partir daqui era só percorreres cada linha (em que as string já estão formadas) e cada coluna e ir originando strings, quando tivesses a string originada utilizavas esta função.

here since 2009

Link to comment
Share on other sites

Boas

Pelo que eu estou a perceber desse enunciado a maneira mais fácil de fazeres isso é usares dois ciclos (um para linha outro para colunas) e comparares carácter a carácter. Desaconselho-te o strstr() porque tinhas de concatenar as strings primeiro.

Se continuares com duvidas diz

Cumps

Link to comment
Share on other sites

Tenho uma dúvida que é:

Peço ao utilizador uma palavra para ver se existe no quebra-cabeças e guardo-a num arreio de caracteres. como faço para depois ir buscar cada caracter da palavra para comparar com cada letra do quebra-cabeças?

Link to comment
Share on other sites

Boas

Pelo que eu estou a perceber desse enunciado a maneira mais fácil de fazeres isso é usares dois ciclos (um para linha outro para colunas) e comparares carácter a carácter. Desaconselho-te o strstr() porque tinhas de concatenar as strings primeiro.

Se continuares com duvidas diz

Cumps

Não percebi porque é que desaconselhaste a função strstr. Não precisa de concatenar nada. Basta percorrer cada elemento de cada coluna e ir adicionando a uma string, no final, basta usar esta função e voilá..

// linhas
for(k=0;k<n;k++) // strstr()

// colunas
for(k=0;k<n;k++) {
  for(i=0;i<n;i++) string[i]=table[k][i];
  string[i]='\0'; // não esquecer
  // strstr()
}

Acho que não pode ser mais simples que isto.  😕

Tenho uma dúvida que é:

Peço ao utilizador uma palavra para ver se existe no quebra-cabeças e guardo-a num arreio de caracteres. como faço para depois ir buscar cada caracter da palavra para comparar com cada letra do quebra-cabeças?

Usas a função strcmp.

here since 2009

Link to comment
Share on other sites

Eu desaconselhei a strstr() porque ele tem que dar a coordenada da matriz onde começa a palavra e além disso o que tu estás a juntar as letras para uma string eu chamo concatenar.

Para mim fazia algo deste género:

-Passar todas as linhas da matriz e comparar em cada uma letra a letra para ver se as palavras existem

-O mesmo para as colunas

Tentava não usar funcões da string.h para conseguires imprimir facilmente o ponto de inicio da string.

Cumps.

Link to comment
Share on other sites

Para não ser um grande spoiler vou só postar uma parte do código, a outra parte é exactamente a mesma coisa mas para as colunas.

for(k=0;k<5;k++) {
  fgets(str,10,stdin);
  pt=strstr(str,"lua");
  if(pt!=NULL) printf("Linha: %i, Coluna: %i\n",k,pt-str);
}

Output (com o mesmo input dado pelo autor do tópico):

localh0st@localh0st-laptop:~/Desktop$ ./a.out < test.in

Linha: 3, Coluna: 3

here since 2009

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.