#define _CRT_SECURE_NO_WARNINGS #include #include void getstring(char *s, size_t n) { fgets(s, n, stdin); if (s[strlen(s) - 1] == '\n') s[strlen(s) - 1] = '\0'; } void lower(char *s) { for (; *s; s++) *s = tolower(*s); } using namespace std; const size_t MAX_SIZE = 256; const char not_allowed[] = "*\"<>?|"; const char separators[] = " \r\n,.!?:;()-"; bool iscorrectname(char *name) { char lext[8]; for (int i = 0; name[i]; i++) { if (strchr(not_allowed, name[i]) != 0) return false; } char *colon = strchr(name, ':'); if (colon != NULL) { if (colon - name != 2) return false; if (colon[1] != '\\') return false; if (strrchr(name, ':') != colon) return false; } char *fname = strrchr(name, '\\'); fname = fname ? fname++ : name; char *ext = strchr(fname, '.'); if (ext == NULL) strcat(name, ".txt"); else { strcpy(lext, ext); lower(lext); if (strcmp(lext, ".txt")) return false; } return true; } int main() { char filename[MAX_SIZE]; char str[MAX_SIZE]; cout << "Input file: "; getstring(filename, MAX_SIZE); if (iscorrectname(filename) == false) { cout << "Entered not correct name\n"; return -1; } FILE *fin = fopen(filename, "rb"); if (fin == NULL) { cout << "Can't open file\n"; return -1; } fseek(fin, 0, SEEK_END); size_t length = ftell(fin); fseek(fin, 0, SEEK_SET); char *text = new char[length + 1]; memset(text, 0, length + 1); fread(text, 1, length, fin); cout << "Input string: "; getstring(str, MAX_SIZE); const char *start = text; size_t count = 0; while (true) { const size_t separator_count = strspn(start, separators); start += separator_count; if (start[0] == '\0') { break; } const size_t word_length = strcspn(start, separators); if (word_length == strlen(str) && strncmp(str, start, word_length) == 0) { count++; } start += word_length; } cout << "Result: " << count << "\n"; fclose(fin); delete text; cin >> str; return 0; }