C++ program to check whether a String is a Pangram or not

Given string str, the task is to check whether a string is pangram or not using in C++.

A string is a Pangram if the string contains all the English alphabet letters.

Examples: 

Input: str = “We promptly judged antique ivory buckles for the next prize”

Output: Yes

Explanations: In the above string, str has all the English alphabet letters.

Input: str = “We promptly judged antique ivory buckles for the prize”

Output: No



 

Method-1:  Without using STL

This approach is based on Hashing. 

  1. A Hashing data structure of boolean type is created of size 26, such that index 0 represents the character ‘a’, 1 represents the character ‘b’ and so on. 
  2. Traverse the string character by character and mark the particular character as present in the Hash. 
  3. After complete traversal and marking of the string, traverse the Hash and see if all characters are present, i.e. every index has true. If all are marked, then return true, else False.

Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ Program to check if the given
// string is a pangram or not
  
#include <bits/stdc++.h>
using namespace std;
  
// Returns true if the string is
// pangram else false
bool checkPangram(string& str)
{
    // Create a hash table to mark
    // the characters
    // present in the string
    vector<bool> mark(26, false);
  
    // For indexing in mark[]
    int index;
  
    // Traverse all characters
    for (int i = 0; i < str.length(); i++) {
  
        // If uppercase character,
        // subtract 'A' to find index.
        if ('A' <= str[i] && str[i] <= 'Z')
            index = str[i] - 'A';
  
        // If lowercase character,
        // subtract 'a' to find index.
        else if ('a' <= str[i]
                 && str[i] <= 'z')
            index = str[i] - 'a';
  
        // If this character is not
        // an alphabet, skip to next one.
        else
            continue;
  
        mark[index] = true;
    }
  
    // Return false
    // if any character is unmarked
    for (int i = 0; i <= 25; i++)
        if (mark[i] == false)
            return (false);
  
    // If all characters were present
    return (true);
}
  
// Driver Code
int main()
{
    string str = "We promptly judged"
                 " antique ivory"
                 " buckles for the next prize";
  
    if (checkPangram(str) == true)
        printf("Yes");
    else
        printf("No");
  
    return (0);
}

chevron_right


Output

Yes

Time Complexity: O(N), where N is the length of the string.
Auxiliary Space: O(1)

Method-2: Using STL

The transform() method of STL can be used to check whether the given string is Pangram or not.

Syntax:

transform(s.begin(), s.end(), s.begin(), ::toupper);

Approach:
In order to check if the string contains all the alphabets of the English alphabet: 

Step 1: Firstly convert all the letters into uppercase or lowercase because if it will check without converting, the lowercase and uppercase alphabets will be considered as different letters. 
Step 2: Sort the string and check the distinct letter. 
Step 3: Space will also be considered as a distinct entity. 
Step 4: Now check if count =27 then the string contains all the 26 alphabets. 

Below is the implementation of the above approach:

CPP

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ Program to check whether
// a string pangram or not using STL
  
#include <bits/stdc++.h>
using namespace std;
  
// Function to return given string
// str is pangrams yes or no
string pangrams(string s)
{
  
    // Initialization of count
    int count = 0;
  
    // Convert each letter into
    // uppercase to avoid counting
    // of both uppercase and
    // lowercase as different letters
    transform(s.begin(),
              s.end(),
              s.begin(),
              ::toupper);
  
    // Sort the string
    sort(s.begin(), s.end());
  
    // Count distinct alphabets
    for (int i = 0; i < s.size(); i++) {
        if (s[i] != s[i + 1])
            count++;
    }
    
    // If count is 27 then the string
    // contains all the alphabets
    // including space as a
    // distinct character
    if (count == 27)
        return "Yes";
  
    else
        return "No";
}
  
// Driver code
int main()
{
    // Given string str
    string str = "We promptly "
                 "judged antique"
                 "ivory buckles for "
                 "the next prize";
  
    // Function Call
    cout << pangrams(str);
  
    return 0;
}

chevron_right


Output

Yes

Time Complexity: O(N), where N is the length of the string.
Auxiliary Space: O(1)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.




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.