C程序 检查字符串是否为Pangram
给定一个字符串Str . 任务是检查它是否是Pangram。
泛音图是一个包含英语字母中每个字母的句子。
示例:
输入: “快速的棕色狐狸跳过懒惰的狗”
输出:是一个Pangram。
解释:包含从’a’到’z’的所有字符] 。
输入: “快速的棕色狐狸跳过狗”
输出:不是一个潘格拉图。
解释:不包含从’a’到’z’的所有字符,因为缺少’l’、’z’、’y’。
方法: 以下是解决该问题的想法
创建一个mark[]布尔类型的数组,遍历字符串的所有字符,并将其标记为访问。小写和大写被认为是一样的。所以’A’和’a’被标记在索引0,同样’Z’和’z’被标记在索引25。
遍历所有的字符后,检查是否所有的字符都被标记。如果没有,则返回false,因为这不是一个pangram,否则返回true。
遵循以下步骤来实施这一想法。
- 创建一个大小为26的bool向量mark[] 。
- 遍历字符串str的所有字符,并将str[i]-‘a’或str[i]-‘A’分别标记为1,表示低位和高位字符。
- 遍历mark[]的所有索引
- 如果所有的索引都被标记为已访问,那么返回值就是一个Pangram。
- 否则,返回不是一个Pangram。
以下是上述方法的实现:
// A C Program to check if the given
// string is a pangram or not
#include <stdbool.h>
#include <stdio.h>
#include <string.h>
// Returns true if the string is pangram else false
bool checkPangram(char str[])
{
// Create a hash table to mark the characters
// present in the string
bool mark[26];
for (int i = 0; i < 26; i++)
mark[i] = false;
// For indexing in mark[]
int index;
// Traverse all characters
size_t size = strlen(str);
for (int i = 0; i < size; 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 other than english
// lowercase and uppercase characters.
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 Program to test above functions
int main()
{
char str[]
= "The quick brown fox jumps over the lazy dog";
if (checkPangram(str) == true)
printf(" %s
is a pangram", str);
else
printf(" %s
is not a pangram", str);
return (0);
}
// This code is contributed by Aditya kumar (adityakumar129)
输出
The quick brown fox jumps over the lazy dog
is a pangram
时间复杂度: O(n),其中n是我们字符串的长度
辅助空间。O(1) ,因为26个大小的布尔向量是恒定的。