Вот один из возможных вариантов переписывания:
std::ifstream f("/file/on/disk");
char buffer[256];
while (f.getline(buffer, sizeof(buf))) { // Use the read operation as the test in the loop.
if (strstr(buffer, pattern) != NULL) { // Don't cast to string; costs time
// further processing, then break out of the while loop and return.
}
}
Основные изменения помечены как встроенные, но для суммирования:
- Используйте операцию чтения в качестве теста в цикле while.Это делает код намного короче и понятнее.
- Не приводите строку в стиле C к
std::string
;просто используйте strstr
для сканирования.
В качестве дальнейшего примечания вы, вероятно, не захотите использовать здесь строку в стиле C, если вы не уверены, что это то, что вам нужно.C ++ string
, вероятно, лучше:
std::ifstream f("/file/on/disk");
std::string buffer;
while (std::getline(f, buffer)) { // Use the read operation as the test in the loop.
if (buffer.find(pattern) != std::string::npos) {
// further processing, then break out of the while loop and return.
}
}