Чтобы определить, может ли фрагмент строки быть проанализирован как целое число, вам просто нужно проанализировать его и посмотреть, добьетесь ли вы успеха.Лучшая функция для этого, вероятно, будет std::strtoul()
, поскольку ее можно указать, сколько символов она потребляет, чтобы вы могли продолжить синтаксический анализ после этого.(Подробнее см. На странице man.)
Однако, если вы уже знаете формат вашего файла, вы можете использовать форматированное извлечение iostream.Это довольно просто:
#include <fstream>
std::ifstream infile("thefile.txt");
int n1, n2, x1, x2, x3, x4;
char c;
if (!(infile >> n1 >> n2)) { /* error, could not read first line! Abort. */ }
while (infile >> x1 >> x2 >> x3 >> x4 >> c)
{
// successfully extracted one line, data is in x1, ..., x4, c.
}
Другая альтернатива - прочитать каждую строку в строку (используя std::getline
), затем создать поток строки из этой строки и проанализировать поток строки с помощью >>
.Это дает дополнительное преимущество, заключающееся в том, что вы можете обнаруживать и пропускать неверные строки и восстанавливать данные, в то время как в представленном выше прямом отформатированном извлечении вы не сможете восстановить ни одну ошибку.