Olá, estou com dificuldade para desenvolver um programa onde o usuário entra com uma quantidade de caracteres, e em seguida o usuário entra com uma palavra e o programa responde se a palavra digitada pode ou não ser gerada pelos caracteres digitados antes.
Estou tentando em java, mas pode ser em c++ tbm
Armazene os caracteres numa lista ou Set.
Método que retorna booleano:
Itere pela palavra e vá checando se cada carácter da palavra está na lista, se algum não tiver, pode retornar false.
Ao final da iteração, retorne true.
Seguindo a ideia de armazenar num Set
, em Java, poderia ser assim:
import java.util.Scanner;
import java.util.Set;
import java.util.stream.Collectors;
public class Main {
public static void main(String... args) {
try (Scanner scan = new Scanner(System.in)) {
Set<Integer> letters = scan.nextLine().chars().boxed().collect(Collectors.toSet());
Set<Integer> word = scan.nextLine().chars().boxed().collect(Collectors.toSet());
letters.retainAll(word);
if (letters.equals(word))
System.out.println("Pode ser gerada.");
else
System.out.println("Não pode ser gerada.");
}
}
}
Já em C++ poderia ser assim:
#include <algorithm>
#include <iostream>
#include <set>
int main() {
std::string input;
std::getline(std::cin, input);
const std::set<char> letters(input.begin(), input.end());
std::getline(std::cin, input);
const std::set<char> word(input.begin(), input.end());
std::set<char> intersection;
std::set_intersection(letters.begin(), letters.end(), word.begin(), word.end(), std::inserter(intersection, intersection.begin()));
if (word == intersection)
std::cout << "Pode ser gerada." << '\n';
else
std::cout << "Não pode ser gerada." << '\n';
return 0;
}
pode me dar um exemplo?
Estou fazendo desse jeito, mas n ta dando certo, sou iniciante kk
import javax.swing.JOptionPane;
public class Principal {
public static void main(String[] args) {
String string;
String alfa;
boolean veri=false;
alfa = JOptionPane.showInputDialog("Entre com o alfabeto:");
string = JOptionPane.showInputDialog("Entre com a palavra:");
if (string.compareTo(alfa)==0) {
veri=true;
}else {
JOptionPane.showMessageDialog(null,"Não pertence ao alfabeto");
}
if (veri==true) {
JOptionPane.showMessageDialog(null,"Pertence ao alfabeto");
}
}
}
botei aqui no java e no c++ e realmente deu certo, mas confesso q n entendi muito.
Em qual linha eu peço pro usuário digitar os valores? teria como eu implementar um texto tipo “Entre aqui com o alfabeto”
“Entre aqui com a palavra”
?
Usando sua ideia com o JOptionPane
, ficaria assim:
Set<Integer> letters = JOptionPane.showInputDialog("Entre com o alfabeto:")
.chars()
.boxed()
.collect(Collectors.toSet());
Set<Integer> word = JOptionPane.showInputDialog("Entre com o alfabeto:")
.chars()
.boxed()
.collect(Collectors.toSet());
Saquei, me achei mais um pouco, vou pesquisar mais sobre Set, parece ser bem util. valeeu