Функция Pangram в переполнении стека

Я просматриваю два дня и не могу найти решение, которое соответствует моему решению.
Я пытаюсь написать функцию Pangram. Я пробовал много способов, но не смог добиться успеха.
Моя функция IsPangram всегда дает it is not Pangram предложи мне несколько способов.

void isPangram()
{
int i;
int count = 0;
char str[26];
cout << "Enter a string to check if its Pangram or not: ";
for (i = 0; i < 26; i++) {
cin >> str[i];

if (i >= 97 && i <= 122) {

cout << "It is Pangram" << endl;
break;
} else {
cout << "it is not Pangram" << endl;
break;
}

}
}

int main()
{
isPangram();
system("pause");
}

1

Решение

В вашем коде 3 проблемы —

(i) Вы пытаетесь проверить, является ли каждый символ панграммой, что неправильно.

(ii) Для проверки вы проверяете по индексу i вместо того, чтобы читать символ, который str[i],

(iii) Это заявление if ( i >= 97 && i <= 122 ) всегда буду оценивать false поскольку значение i может быть только между 0 и 26. Следовательно, вы всегда получаете не панграмму.

Попробуй это —

void isPangram() {
int i;
int count = 0;
char str[27];
cout << "Enter a string to check if its Pangram or not: ";

// Read the string
cin >> str;

short flagArr[26]; // Array to flag the characters used
memset(flagArr, 0, sizeof(flagArr));
bool panGramFlag = true;

// Loop through the string and mark the characters read
for (int i = 0; i < 27; i++) {
if (str[i] >= 'A' && str[i] <= 'Z') {
flagArr[str[i]-'A'] = 1;
}
}

// Loop through flag array and check if any character is not used.
for (int i = 0; i < 26; i++) {
if (flagArr[i] == 0) {
panGramFlag = false;
cout << "It is not Pangram" << endl;
break;
}
}

if (panGramFlag)
cout << "it is Pangram" << endl;

}

int main() {

isPangram();

system("pause");
}
1

Другие решения

Это простой, подумайте логически

#include<iostream.h>
#include<string.h>
#include<conio.h>
void isPangram()
{
int i;
char str[26];
cout << "Enter a string to check if its Pangram or not: ";
for (i = 0; i < 26; i++) {
cin >> str[i];

if ((str[i] >= 97 && str[i] <= 122)||((str[i] >= 65 && str[i] <= 91))
{

cout << "It is Pangram" << endl;
break;
} else {
cout << "it is not Pangram" << endl;
break;
}

}
}

int main()
{
isPangram();
getch();
return 0;
}
0

#include<iostream>
using namespace std;

bool chkpangram(string &str)
{
int m[26] = {0}, i, index;
for(i = 0; i < str.length(); i++)
{
if (str[i] >= 65 && str[i] <= 90)
index = str[i] - 65;
else if(str[i] >= 97 && str[i] <= 122)
index = str[i] - 97;

m[index] = m[index]++;
}
for (int i=0; i<=25; i++)
if (m[i] == 0)
return (false);

return true;
}

int main()
{
string str = "The quick brown fox jumps over the lazy dog";
if(str.length() < 26)
cout<<"Not a Pangram";
else
{
if(chkpangram(str) == true)
cout<<"Is a Pangram";
else
cout<<"Not a Pangram";
}
return 0;
}
0
По вопросам рекламы [email protected]