Добавление и представление символов с помощью звездочки в 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