Jump to content

Número de ocorrências de uma palavra


javsrt
 Share

Recommended Posts

Boas noites

Tenho de criar um programa que me diga o número de ocorrencias de uma palavra numa frase.

O código que tenho conta as vezes que aparece mas tambem conta no caso da palavra aparecer no meio/inicio/fim de uma outra palavra

por exemplo:

frase:" Ola mundo adeusmundo"

ele diz-me que a palavra mundo aparece duas vezes na frase e n sei como corrigir isso

se me puderem ajudar desde ja agradeço

public static void main(String[] args) {
	// TODO code application logic here
	int conta=0,n=0;
	Scanner sc = new Scanner(System.in);

	System.out.println("Frase: ");
	String frase =sc.nextLine();
	frase = frase.toLowerCase();
	System.out.println("Palavra: ");
	String palavra =sc.nextLine();
	palavra = palavra.toLowerCase();

	for(int i=0;i<frase.length();i++){
		if(palavra.charAt(conta)==frase.charAt(i)){
			conta++;
		}
		else{
			conta=0;
		}
		if(conta>=palavra.length()){
			conta=0;
			n++;
		}
	}
	System.out.println("A palavra "+palavra+" ocorre "+n+" vezes na frase");
}
Link to comment
Share on other sites

Sugestão:

- inicializa conta a -1;

- quando encontrares um espaço, passa conta para 0;

- compara apenas as letras quando conta for maior ou igual a 0 (ou seja, a palavra terá que começar num espaço);

- quando a comparação de letras falhar, passas conta para -1 novamente.

(Isto vai falhar se a palavra aparecer logo no início. Mas este pormenor é fácil de resolver. Há outras melhorias que podem ser feitas, nomeadamente para tratar outros caracteres com espaços. Há mais alguns detalhes a ter em conta, por isso se tiveres erros, coloca aqui a solução actualizada, e alguém diz-te como corrigir.)

Link to comment
Share on other sites

que fica muito longe duma solução como esta:

import java.util.regex.Pattern;
import java.util.regex.Matcher;

class pap {
   private static final String PATTERN = "(^|\\s+)mundo(\\s+|$)";
   private static final String FRASE = "Ola mundo adeusmundo";

   public static void main(String[] args) {
       Matcher m = Pattern.compile(PATTERN).matcher(FRASE);

       int count = 0;
       while (m.find()) ++count;

       System.out.println("number of occurences : " + count);
   }
}
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

que fica muito longe duma solução como esta:

import java.util.regex.Pattern;
import java.util.regex.Matcher;

class pap {
private static final String PATTERN = "(^|\\s+)mundo(\\s+|$)";
private static final String FRASE = "Ola mundo adeusmundo";

public static void main(String[] args) {
	Matcher m = Pattern.compile(PATTERN).matcher(FRASE);

	int count = 0;
	while (m.find()) ++count;

	System.out.println("number of occurences : " + count);
}
}

O código está certo! Mas o count deveria iniciar em -1 e não em zero ok!

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.