#include #include #include using namespace std; int main() { char fileName[260]; cin.getline(fileName, 260); if (strchr(fileName, '*') || strchr(fileName, '"') || strchr(fileName, '<') || strchr(fileName, '>') || strchr(fileName, '?') || strchr(fileName, '|') || strchr(fileName + 2, ':') || (fileName[0] == ':')) { cout << "Invalid path" << endl; return 1; } if (fileName[1] == ':' && (!isalpha(fileName[0]) || fileName[2] != '\\')) { cout << "Invalid path" << endl; return 1; } if (strrchr(fileName, '.') && (strrchr(fileName, '.') > strrchr(fileName, '\\')) && (strrchr(fileName, '.') > strrchr(fileName, '/'))) { char* ext = strrchr(fileName, '.') + 1; if (strlen(ext) != 3) { cout << "Invalid path" << endl; return 1; } ext[0] = tolower(ext[0]); ext[1] = tolower(ext[1]); ext[2] = tolower(ext[2]); if (strncmp(ext, "txt", 3) != 0) { cout << "Invalid path" << endl; return 1; } } else { strcat_s(fileName, 260, ".txt"); } ifstream fin; fin.open(fileName, ios_base::binary); if (!fin.is_open()) { cout << "Can't open file" << endl; return 1; } fin.seekg(0, ios_base::_Seekend); size_t size = fin.tellg(); fin.seekg(0, ios_base::_Seekbeg); char* buf = new char[size]; fin.read(buf, size); fin.close(); char str[64]; cin.getline(str, 64); char* found = buf - 1; uint16_t cnt = -1; do { ++cnt; ++found; found = strstr(found, str); } while (found); delete[] buf; cout << cnt << " occurrences found" << endl; cin.get(); return 0; }