How to Check Whether a String Contains Every Letter in the Alphabet in C++

How to check if a string contains all the letters of the alphabet? [duplicate]

All these solutions seem to do a lot of work for a relatively simple check, especially given Java 8's stream API:

/* Your lowercase string */.chars()
.filter(i -> i >= 'a' && i <= 'z')
.distinct().count() == 26;

Edit: For speed

If you want to end the string iteration as soon as the entire alphabet is found while still using streams, then you can keep track with a HashSet internally:

Set<Integer> chars = new HashSet<>();
String s = /* Your lowercase string */;
s.length() > 25 && s.chars()
.filter(i -> i >= 'a' && i <= 'z') //only alphabet
.filter(chars::add) //add to our tracking set if we reach this point
.filter(i -> chars.size() == 26) //filter the 26th letter found
.findAny().isPresent(); //if the 26th is found, return

This way, the stream will cease as soon as the Set is filled with the 26 required characters.

There are some (even still) more efficient solutions in terms of performance below, but as a personal note I will say to not bog yourself in premature optimization too much, where you could have readability and less effort in writing the actual code.

Function to check for alphabetic characters

Take a look at isalpha in ctype.h. This returns true if a char is a letter, just like what you want.

http://www.cplusplus.com/reference/cctype/isalpha/

By the way, if you're checking ASCII encodings, your function fails for characters such as '(' or '~'.

How do I check if a string contains a certain character?

By using strchr(), like this for example:

#include <stdio.h>
#include <string.h>

int main(void)
{
char str[] = "Hi, I'm odd!";
int exclamationCheck = 0;
if(strchr(str, '!') != NULL)
{
exclamationCheck = 1;
}
printf("exclamationCheck = %d\n", exclamationCheck);
return 0;
}

Output:

exclamationCheck = 1

If you are looking for a laconic one liner, then you could follow @melpomene's approach:

int exclamationCheck = strchr(str, '!') != NULL;

If you are not allowed to use methods from the C String Library, then, as @SomeProgrammerDude suggested, you could simply iterate over the string, and if any character is the exclamation mark, as demonstrated in this example:

#include <stdio.h>

int main(void)
{
char str[] = "Hi, I'm odd";
int exclamationCheck = 0;
for(int i = 0; str[i] != '\0'; ++i)
{
if(str[i] == '!')
{
exclamationCheck = 1;
break;
}
}
printf("exclamationCheck = %d\n", exclamationCheck);
return 0;
}

Output:

exclamationCheck = 0

Notice that you could break the loop when at least one exclamation mark is found, so that you don't need to iterate over the whole string.


PS: What should main() return in C and C++? int, not void.

How do I check if a string contains ALL letters of the alphabet in python?

This is not something I'd solve with a regular expression, no. Create a set of the lowercased string and check if it is a superset of the letters of the alphabet:

import string

alphabet = set(string.ascii_lowercase)

def ispangram(input_string):
return set(input_string.lower()) >= alphabet

Only if every letter of the alphabet is in the set created from the input text will it be a superset; by using a superset and not equality, you allow for punctuation, digits and whitespace, in addition to the (ASCII) letters.

Demo:

>>> import string
>>> alphabet = set(string.ascii_lowercase)
>>> input_string = 'We promptly judged antique ivory buckles for the next prize'
>>> set(input_string.lower()) >= alphabet
True
>>> set(input_string[:15].lower()) >= alphabet
False

How to check if String consist of numeric or alphabet in C

like this:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <stdbool.h>

bool validate_data(const char rec[], int *number, char text[]){
*number = -1;//if invalid
*text = 0; //if invalid

if(strncmp(rec, "*H1", 3) != 0) return false;//invalid header

bool not_digit = false;
int i, j = 0;
for(i = 3; rec[i] && rec[i] != '#'; ++i){
text[j++] = rec[i];
if(!isdigit(rec[i]))
not_digit = true;
}
text[j] = 0;

if(rec[i] != '#'){
*text = 0;
return false;//invalid footer
}
if(not_digit == false){
if(j != 6){
*text = 0;//valid as text?
return false;//invalid number format
}
*number = atoi(text);
}
return true;
}


int main(void){
const char *test_data[] = {
"*H1000000#","*H1999999#", "*H1123456#", "*H1FINE#", "*H1MED#",
"*h123#", "**H1666666#", "*H2888888#", "*H1777#", "*H1555555"
};
int number_of_data = sizeof(test_data)/sizeof(*test_data);
char H1subbuff[10];
int H1Val;

for(int i = 0; i < number_of_data; ++i){
printf("%s :\n", test_data[i]);
if(validate_data(test_data[i], &H1Val, H1subbuff)){
if(H1Val >= 0)
printf("value is %d(%s)\n", H1Val, H1subbuff);
else
printf("text is %s\n", H1subbuff);
} else {
printf("invalid format\n");
}
puts("");
}
return 0;
}

How to check if a String contains any letter from a to z? [duplicate]

Replace your for loop by this :

errorCounter = Regex.Matches(yourstring,@"[a-zA-Z]").Count;

Remember to use Regex class, you have to using System.Text.RegularExpressions; in your import

How can I check if a string contains ANY letters from the alphabet?

Regex should be a fast approach:

re.search('[a-zA-Z]', the_string)

How to check if a string is a letter(a-z or A-Z) in c

You can use the isalpha() and isdigit() standard functions. Just include <ctype.h>.

     if (isdigit(integer)) != 0){
printf("Got an integer\n");
}
else if (isalpha(integer))
printf"Got a char\n");
}
else{
// must be an operator
}


Related Topics



Leave a reply



Submit