Добавление и представление символов с помощью звездочки в Java

У меня есть это задание, в котором мне нужно создать программу, которая читает пользовательский ввод и читает предложение, и в конце оно должно представлять количество раз, которое каждый символ повторяется со звездочкой.

К этому времени это весь код, который у меня есть для этого назначения:

    import java.util.Scanner;

    public class Chars {
public static void main (String[] args){
    Scanner teclado = new Scanner(System.in);
    System.out.println("insere um texto");
    String teutexto = teclado.nextLine();
    int a = 0;
    for(int x=0;x<teutexto.length();x++){
        if( String.charAt(0) == 'a'){

        }

    }

1 ответ

Решение

Это простой способ сделать это с помощью сортировки ведра. Вы просто сохраняете массив целых чисел для каждого символа в алфавите и увеличиваете их каждый раз, когда символ появляется во входной строке.

Мы знаем это (int)'a' = 97, (int)'b' = 98 и т.д. Так что маленький трюк для представления (a,b,...,z) как (0,1,...,25) чтобы установить это для данного персонажа ch тот (int)(ch-'a'), Таким образом мы вычитаем значение ch с 97, Например: (int)('a'-'a') = 0 а также (int)('z'-'a') = 25,

Теперь мы можем легко сделать массив int[] occurrences = new int[26] где occurrences[i] будет количество вхождений i-го символа в алфавите.

Например в строке "aaab"после запуска алгоритма:

occurrences[0] = 3 а также occurrences[1] = 1,

Это так же, как

occurrences['a'-'a'] = 3 а также occurrences['b'-'a'] = 1

Если вы понимаете эту концепцию, вы увидите, что мы можем просто пройтись по входной строке и для каждого символа ch мы можем просто увеличить occurrences[ch-'a']++, Это весь алгоритм.

Вот полный код:

Scanner input = new Scanner(System.in);
String str = input.nextLine().toLowerCase();

int[] occurrences = new int[26];

// go through all the characters in the input string
for(char ch : str.toCharArray())
    if(ch >= 'a' && ch <= 'z') // 'ch' is a valid character in the alphabet
        occurrences[ch-'a']++; // increase the occurrence of 'ch'

// go through the the alphabet
for(int i = 0; i < 26; i++) {
    System.out.print((char)('a'+i) + ": "); // print the i-th character in the alphabet
    // occurrences[i] contains the number of occurrences of the i-th character
    for(int j = 0; j < occurrences[i]; j++)
        System.out.print("*"); // print '*' for every occurrance of the i-th character
    System.out.println(); // separate with new line
}
input.close(); // close scanner
Другие вопросы по тегам