yazinin C dilinin isimlendirme kurallarina uygun olup olmadigini sinama
#include
int is_legal(const char * str);
int is_keyword(const char *str);
int mystrcmp(const char *str1, const char*str2);
unsigned int mystrlen(const char *string);
int main() {
char str[100];
printf("sinanacak ismi girin : ");
gets(str);
if (is_legal(str))
printf("(%s) legal isim\n", str);
else
printf("(%s) legal isim DEGIL\n", str);
return 0;
}
int is_legal(const char * str) {
int i;
char ch;
char legals[63];
if (is_keyword(str))
return 0;
if (mystrlen(str) > 31)
return 0;
ch = *str;
if (ch >= '0' && ch <= '9')
return 0;
for (i = 0; i < 63; ++i) {
if (i < 63)
legals[i] = 'A' + i - 37;
if (i < 37)
legals[i] = 'a' + i - 11;
if (i < 11)
legals[i] = '0' + i - 1;
if (i < 1)
legals[i] = '_';
}
while (*str != '\0') {
int flag = 1;
for (i = 0; i < 63; ++i)
if (*str == legals[i])
flag = 0;
if (flag)
return 0;
++str;
}
return 1;
}
int is_keyword(const char *str) {
int i;
char *keywords[32] = { "auto", "break", "case", "char", "const", "continue", "default",
"do", "double", "else", "enum", "extern", "float", "for",
"goto", "if", "int", "long", "register", "return", "short",
"signed", "sizeof", "static", "struct", "switch", "typedef",
"union", "unsigned", "void", "volatile", "while"};
for (i = 0; i < 32; ++i)
if (mystrcmp(str, keywords[i]) == 0)
return 1;
return 0;
}
int mystrcmp(const char *str1, const char*str2) {
while (*str1 == *str2) {
if (*str1 == '\0')
return 0;
++str1;
++str2;
}
return *(unsigned char *)str1 > *(unsigned char *)str2 ? 1 : -1;
}
unsigned int mystrlen(const char *string) {
unsigned int lenght = 0;
while (string[lenght] != '\0')
++lenght;
return lenght;
}
Thursday, July 13, 2006
Yorumlar
Isim
Email
Yorum (HTML kapali)