# Print number of words, vowels and frequency of each character

Given a string str with uppercase, lowercase and special characters. The input string is to end with either a space or a dot. The problem is to calculate the number of words, vowels and frequency of each character of the string in a separate line.

Example :

```Input : How Good GOD Is.

Output :
Number of words = 4
Number of vowels = 5
Number of upper case characters = 6
Character =   Frequency = 3
Character = . Frequency = 1
Character = D Frequency = 1
Character = G Frequency = 2
Character = H Frequency = 1
Character = I Frequency = 1
Character = O Frequency = 1
Character = d Frequency = 1
Character = o Frequency = 3
Character = s Frequency = 1
Character = w Frequency = 1
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach : We use a TreeMap to store characters and their frequencies. TreeMap is used to get the output in sorted order.

Below is Java implementation of above approach :

## C++

 `// C++ program to print Number of Words, ` `// Vowels and Frequency of Each Character ` `#include ` `using` `namespace` `std; ` ` `  `void` `words(string str) ` `{ ` `    ``int` `wcount = 0, ucount = 0, vcount = 0; ` `    ``for` `(``int` `i = 0; i < str.length(); i++)  ` `    ``{ ` `        ``char` `c = str[i]; ` `        ``switch` `(c)  ` `        ``{ ` `            ``case` `' '``: ` `            ``case` `'.'``: ` `            ``wcount++; ``// more delimiters can be given ` `        ``} ` ` `  `        ``switch` `(c)  ` `        ``{ ` `            ``case` `'A'``: ` `            ``case` `'E'``: ` `            ``case` `'I'``: ` `            ``case` `'O'``: ` `            ``case` `'U'``: ` `            ``case` `'a'``: ` `            ``case` `'e'``: ` `            ``case` `'i'``: ` `            ``case` `'o'``: ` `            ``case` `'u'``: ` `                ``vcount++; ` `        ``} ` ` `  `        ``if` `(c >= 65 and c <= 90) ucount++; ` `    ``} ` ` `  `    ``cout << ``"Number of words = "`  `         ``<< wcount << endl; ` `    ``cout << ``"Number of vowels = "`  `         ``<< vcount << endl; ` `    ``cout << ``"Number of upper case characters = "`  `         ``<< ucount << endl; ` `} ` ` `  `// Function to calculate the frequency ` `// of each character in the string ` `void` `frequency(string str)  ` `{ ` `    ``// Creates an empty TreeMap ` `    ``map<``char``, ``int``> hmap; ` ` `  `    ``// Traverse through the given array ` `    ``for` `(``int` `i = 0; i < str.length(); i++)  ` `        ``hmap[str[i]]++; ` ` `  `    ``// Print result ` `    ``for` `(``auto` `i : hmap) ` `    ``{ ` `        ``cout << ``"Character = "` `<< i.first; ` `        ``cout << ``" Frequency = "`  `             ``<< i.second << endl; ` `    ``} ` `} ` ` `  `// Driver Code ` `int` `main(``int` `argc, ``char` `const` `*argv[]) ` `{ ` `    ``string str = ``"Geeks for Geeks."``; ` `    ``words(str); ` `    ``frequency(str); ` `    ``return` `0; ` `} ` ` `  `// This code is contributed by ` `// sanjeev2552 `

## Java

 `// Java program to print Number of Words, ` `// Vowels and Frequency of Each Character ` `import` `java.util.*; ` `import` `java.lang.*; ` `import` `java.io.*; ` ` `  `public` `class` `Stringfun  ` `{ ` `    ``String str = ``"Geeks for Geeks."``; ` ` `  `    ``void` `words() ` `    ``{ ` `        ``int` `wCount = ``0``, uCount = ``0``, vCount = ``0``; ` ` `  `        ``for` `(``int` `i = ``0``; i < str.length(); i++)  ` `        ``{ ` `            ``char` `c = str.charAt(i); ` ` `  `            ``switch` `(c)  ` `            ``{ ` `            ``case` `' '``: ` `            ``case` `'.'``: ` `                ``wCount++; ``// more delimiters can be given ` `            ``} ` ` `  `            ``switch` `(c)  ` `            ``{ ` `            ``// program for calculating number of vowels ` `            ``case` `'A'``: ` `            ``case` `'E'``: ` `            ``case` `'I'``: ` `            ``case` `'O'``: ` `            ``case` `'U'``: ` `            ``case` `'a'``: ` `            ``case` `'e'``: ` `            ``case` `'i'``: ` `            ``case` `'o'``: ` `            ``case` `'u'``: ` `                ``vCount++; ` `            ``} ` ` `  `            ``if` `(c >= ``65` `&& c <= ``90``)  ` `            ``{ ` `                ``uCount++; ` `            ``} ` `        ``} ` ` `  `        ``System.out.println(``"Number of words = "` `+ wCount); ` `        ``System.out.println(``"Number of vowels = "` `+ vCount); ` `        ``System.out.println(``"Number of upper case characters = "` `                                                        ``+ uCount); ` `    ``} ` ` `  `    ``// Function to calculate the frequency ` `    ``// of each character in the string ` `    ``void` `frequency() ` `    ``{ ` `        ``// Creates an empty TreeMap ` `        ``TreeMap hmap =  ` `                     ``new` `TreeMap(); ` `  `  `        ``// Traverse through the given array ` `        ``for` `(``int` `i = ``0``; i < str.length(); i++) ` `        ``{ ` `            ``Integer c = hmap.get(str.charAt(i)); ` `  `  `            ``// If this is first occurrence of element  ` `            ``if` `(hmap.get(str.charAt(i)) == ``null``) ` `               ``hmap.put(str.charAt(i), ``1``); ` `  `  `            ``// If elements already exists in hash map ` `            ``else` `              ``hmap.put(str.charAt(i), ++c); ` `        ``} ` `         `  `        ``// Print result ` `        ``for` `(Map.Entry m:hmap.entrySet()) ` `          ``System.out.println(``"Character = "` `+ m.getKey() +  ` `                         ``" Frequency = "` `+ m.getValue()); ` `    ``} ` ` `  `    ``// Driver program to run and test above program ` `    ``public` `static` `void` `main(String args[]) ``throws` `IOException ` `    ``{ ` `        ``Stringfun obj = ``new` `Stringfun(); ` `        ``obj.words(); ` `        ``obj.frequency(); ` `    ``} ` `} `

## Python 3

 `# Python3 program to print Number of Words, ` `# Vowels and Frequency of Each Character ` ` `  `# A method to count the number of  ` `# uppercase character, vowels and number of words ` `def` `words(``str``): ` `    ``wcount ``=` `vcount ``=` `ucount ``=` `i ``=` `0` `    ``while` `i < ``len``(``str``): ` `        ``ch ``=` `str``[i] ` `         `  `        ``# condition checking for word count ` `        ``if` `(ch ``=``=` `" "` `or` `ch ``=``=` `"."``): ` `            ``wcount ``+``=` `1` `             `  `        ``# condition checking for vowels  ` `        ``# in lower case      ` `        ``if``(ch ``=``=` `"a"` `or` `ch ``=``=` `"e"` `or`  `           ``ch ``=``=` `"i"` `or` `ch ``=``=` `'o'` `or` `ch ``=``=` `"u"``): ` `            ``vcount ``+``=` `1` `             `  `        ``# condition checking for vowels in uppercase  ` `        ``if` `(ch ``=``=` `"A"` `or` `ch ``=``=` `"E"` `or`  `            ``ch ``=``=` `"I"` `or` `ch ``=``=` `'O'` `or` `ch ``=``=` `"U"``): ` `            ``vcount ``+``=` `1` `             `  `        ``# condition checking for upper case characters  ` `        ``if` `(``ord``(ch) >``=` `65` `and` `ord``(ch) <``=` `90``): ` `            ``ucount ``+``=` `1` `        ``i ``+``=` `1` `         `  `    ``print``(``"number of words = "``, wcount) ` `    ``print``(``"number of vowels = "``, vcount) ` `    ``print``(``"number of upper case characters = "``,  ` `                                        ``ucount) ` `     `  `# a method to print the frequency  ` `# of each character.  ` `def` `frequency(``str``): ` `    ``i ``=` `1` `     `  `    ``# checking each and every ` `    ``# ascii code character  ` `    ``while` `i < ``127``: ` `        ``ch1 ``=` `chr``(i) ` `        ``c ``=` `0` `        ``j ``=` `0` `        ``while` `j < ``len``(``str``): ` `            ``ch2 ``=` `str``[j] ` `            ``if``(ch1 ``=``=` `ch2): ` `                ``c ``+``=` `1` `            ``j ``+``=` `1` `             `  `        ``# condition to print the freqency  ` `        ``if` `c > ``0``: ` `            ``print``(``"Character:"``, ch1 ``+`  `                  ``" Frequency:"``, c) ` `        ``i ``+``=` `1` `         `  `# Driver Code ` ` `  `# sample string to check the code      ` `s ``=` `"Geeks for Geeks."` ` `  `# function calling ` `words(s) ` `frequency(s) ` ` `  `# This code is contributed by Animesh_Gupta `

Output :

```Number of words = 3
Number of vowels = 5
Number of upper case characters = 2
Character =   Frequency = 2
Character = . Frequency = 1
Character = G Frequency = 2
Character = e Frequency = 4
Character = f Frequency = 1
Character = k Frequency = 2
Character = o Frequency = 1
Character = r Frequency = 1
Character = s Frequency = 2```

Time Complexity : O(n), where n is the number of characters in the string.
Auxiliary Space : O(1).

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Improved By : sanjeev2552, Animesh_Gupta

Article Tags :
Practice Tags :

2

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.