#include <stdio.h>
#include <string.h>
#include<bits/stdc++.h>
using namespace std;
char keyword[32][10]=
{
"auto","double","int","struct","break","else","long",
"switch","case","enum","register","typedef","char",
"extern","return","union","const","float","short",
"unsigned","continue","for","signed","void","default",
"goto","sizeof","voltile","do","if","static","while"
} ;
int is_valid(char str[])
{
if (isdigit(str[0]))
return 0;
int i = 0;
while(str[i]!='\0')
{
char ch = str[i];
if(!isdigit(ch) && !isalpha(ch) && ch!='-')
return 0;
i++;
}
return 1;
}
int is_keyword(char s[])
{
int i = 0;
for (i = 0 ; i< 32 ; i++)
{
if(strcmp(keyword[i],s)==0)
return 0;
}
return 1;
}
int main()
{
char str[100];
char key[100];
int i,a=0;
int space=0;
printf("Enter a string\n");
scanf("%[^.]s",str);
char sp[] = " ";
char words[100][100] , valid_words[100][100] , invalid_words[100][100];
char *ptr = strtok(str, sp);
int ind = 0;
while(ptr != NULL)
{
strcpy(words[ind++], ptr);
ptr = strtok(NULL, sp);
}
int ind1 = 0, ind2=0;
for(i= 0 ; i<ind ; i++)
{
if(is_keyword(words[i])==1)
if(is_valid(words[i])==1)
{
strcpy(valid_words[ind1++], words[i]);
}
else
{
strcpy(invalid_words[ind2++], words[i]);
}
}
printf("\n\nValid Identifiers: ");
for( i= 0; i< ind1 ; i++)
{
if(i!=ind1-1)
{
printf("%s ,",valid_words[i]);
}
else
printf("%s",valid_words[i]);
}
printf("\n\nInvalid Identifiers: ");
for( i= 0; i< ind2 ; i++)
{
if(i!=ind2-1)
{
printf("%s ,",invalid_words[i]);
}
else
printf("%s",invalid_words[i]);
}
printf("\n\nKeywords: \n");
for(i= 0 ; i<ind ; i++)
{
if(is_keyword(words[i])==0)
printf("%s\n", words[i]);
}
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKY2hhciBrZXl3b3JkWzMyXVsxMF09CnsKICAgICJhdXRvIiwiZG91YmxlIiwiaW50Iiwic3RydWN0IiwiYnJlYWsiLCJlbHNlIiwibG9uZyIsCiAgICAic3dpdGNoIiwiY2FzZSIsImVudW0iLCJyZWdpc3RlciIsInR5cGVkZWYiLCJjaGFyIiwKICAgICJleHRlcm4iLCJyZXR1cm4iLCJ1bmlvbiIsImNvbnN0IiwiZmxvYXQiLCJzaG9ydCIsCiAgICAidW5zaWduZWQiLCJjb250aW51ZSIsImZvciIsInNpZ25lZCIsInZvaWQiLCJkZWZhdWx0IiwKICAgICJnb3RvIiwic2l6ZW9mIiwidm9sdGlsZSIsImRvIiwiaWYiLCJzdGF0aWMiLCJ3aGlsZSIKfSA7CgppbnQgaXNfdmFsaWQoY2hhciBzdHJbXSkKewogICAgaWYgKGlzZGlnaXQoc3RyWzBdKSkKICAgICAgICByZXR1cm4gMDsKICAgIGludCBpID0gMDsKICAgIHdoaWxlKHN0cltpXSE9J1wwJykKICAgIHsKICAgICAgICBjaGFyIGNoID0gc3RyW2ldOwogICAgICAgIGlmKCFpc2RpZ2l0KGNoKSAmJiAhaXNhbHBoYShjaCkgJiYgY2ghPSctJykKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgaSsrOwogICAgfQoKICAgIHJldHVybiAxOwp9CmludCBpc19rZXl3b3JkKGNoYXIgc1tdKQp7CiAgICBpbnQgaSA9IDA7CiAgICBmb3IgKGkgPSAwIDsgaTwgMzIgOyBpKyspCiAgICB7CiAgICAgICAgaWYoc3RyY21wKGtleXdvcmRbaV0scyk9PTApCiAgICAgICAgICAgIHJldHVybiAwOwogICAgfQogICAgcmV0dXJuIDE7Cn0KaW50IG1haW4oKQp7CgogICAgY2hhciBzdHJbMTAwXTsKICAgIGNoYXIga2V5WzEwMF07CgoKICAgIGludCBpLGE9MDsKICAgIGludCBzcGFjZT0wOwogICAgcHJpbnRmKCJFbnRlciBhIHN0cmluZ1xuIik7CiAgICBzY2FuZigiJVteLl1zIixzdHIpOwoKCgoKICAgIGNoYXIgc3BbXSA9ICIgIjsKICAgIGNoYXIgd29yZHNbMTAwXVsxMDBdICwgdmFsaWRfd29yZHNbMTAwXVsxMDBdICwgaW52YWxpZF93b3Jkc1sxMDBdWzEwMF07CiAgICBjaGFyICpwdHIgPSBzdHJ0b2soc3RyLCBzcCk7CiAgICBpbnQgaW5kID0gMDsKCgogICAgd2hpbGUocHRyICE9IE5VTEwpCiAgICB7CgogICAgICAgIHN0cmNweSh3b3Jkc1tpbmQrK10sIHB0cik7CiAgICAgICAgcHRyID0gc3RydG9rKE5VTEwsIHNwKTsKCgoKICAgIH0KCgoKCgogICAgaW50IGluZDEgPSAwLCBpbmQyPTA7CiAgICBmb3IoaT0gMCA7IGk8aW5kIDsgaSsrKQogICAgewogICAgICAgIGlmKGlzX2tleXdvcmQod29yZHNbaV0pPT0xKQogICAgICAgICAgICBpZihpc192YWxpZCh3b3Jkc1tpXSk9PTEpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHN0cmNweSh2YWxpZF93b3Jkc1tpbmQxKytdLCB3b3Jkc1tpXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgc3RyY3B5KGludmFsaWRfd29yZHNbaW5kMisrXSwgd29yZHNbaV0pOwogICAgICAgICAgICB9CiAgICB9CgogICBwcmludGYoIlxuXG5WYWxpZCBJZGVudGlmaWVyczogIik7CiAgIGZvciggaT0gMDsgaTwgaW5kMSA7IGkrKykKICAgIHsKICAgICAgICBpZihpIT1pbmQxLTEpCiAgICAgICAgewogICAgICAgICAgICBwcmludGYoIiVzICwiLHZhbGlkX3dvcmRzW2ldKTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgICAgIHByaW50ZigiJXMiLHZhbGlkX3dvcmRzW2ldKTsKICAgIH0KCiAgICBwcmludGYoIlxuXG5JbnZhbGlkIElkZW50aWZpZXJzOiAiKTsKICAgIGZvciggaT0gMDsgaTwgaW5kMiA7IGkrKykKICAgIHsKICAgICAgICBpZihpIT1pbmQyLTEpCiAgICAgICAgewogICAgICAgICAgICBwcmludGYoIiVzICwiLGludmFsaWRfd29yZHNbaV0pOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICAgICAgcHJpbnRmKCIlcyIsaW52YWxpZF93b3Jkc1tpXSk7CiAgICB9CgoKICAgIHByaW50ZigiXG5cbktleXdvcmRzOiBcbiIpOwogICAgZm9yKGk9IDAgOyBpPGluZCA7IGkrKykKICAgIHsKICAgICAgICBpZihpc19rZXl3b3JkKHdvcmRzW2ldKT09MCkKICAgICAgICAgICAgcHJpbnRmKCIlc1xuIiwgd29yZHNbaV0pOwogICAgfQoKCn0KCg==