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
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 <bits/stdc++.h> 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<Character, Integer> hmap = new TreeMap<Character, Integer>(); // 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).
Attention reader! Don’t stop learning now. Get hold of all the important Java Foundation and Collections concepts with the Fundamentals of Java and Java Collections Course at a student-friendly price and become industry ready.