Могу предложить такой примитивный вариант. Он не обрабатывает комментарии, строковые константы, может ещё что-нибудь, особо не тестил.
| Код | bool isKeyword(char * word) { // список зарезервированных слов, нужно его дополнить const char * keywords = " return sizeof void false true int while const if bool for break continue "; return strstr(keywords, word) ? true : false; }
bool isAlpha(char * word) { return isalpha(word[1]) || word[1] == '_' ; }
int main() { char idArray[4096] = ""; char buf[512] = ""; char id[64]; char * sep = " `~!@#$%^&*()+|\\=-[]{};:/?.><,"; char * p; ifstream in("input.txt"); ofstream out("output.txt"); if(in.is_open() && out.is_open()) { while(in >> buf) { p = strtok(buf, sep); while(p != NULL) { strcpy(id, " "); strcat(id, p); strcat(id, " "); if(!isKeyword(id) && isAlpha(id)) { if(!strstr(idArray, id)) { strcat(idArray, id); out << id + 1<< endl; } } p = strtok(NULL, sep); } } } in.close(); out.close(); return 0; } |
|