📜  用于检查字符串是否为Pangram的C++程序

📅  最后修改于: 2021-05-30 07:13:48             🧑  作者: Mango

给定字符串str,任务是检查在C++中是否使用了字符串。

例子:

方法1:不使用STL

此方法基于哈希。

  1. 创建大小为26的布尔类型的哈希数据结构,以使索引0表示字符“ a”,索引1表示字符“ b”,依此类推。
  2. 由字符遍历字符串字符和记号特定的字符作为存在于哈希。
  3. 在完成遍历和标记字符串,遍历Hash并查看是否存在所有字符,即每个索引都为true。如果都标记,则返回true,否则返回False。

下面是上述方法的实现:

C++
// C++ Program to check if the given
// string is a pangram or not
  
#include 
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 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);
}


CPP
// C++ Program to check whether
// a string pangram or not using STL
  
#include 
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;
}


输出
Yes

时间复杂度: O(N),其中N是字符串长度
辅助空间: O(1)

方法2:使用STL

STL的transform()方法可用于检查给定的字符串是否为Pangram。

句法:

方法:
为了检查字符串包含英语字母的所有字母,请执行以下操作:

下面是上述方法的实现:

CPP

// C++ Program to check whether
// a string pangram or not using STL
  
#include 
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;
}
输出
Yes

时间复杂度: O(N),其中N是字符串长度
辅助空间: O(1)

要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”