Чтение файловых пар символов в массив - PullRequest
0 голосов
/ 02 октября 2011

В C ++, как я могу прочитать содержимое файла в массив строк?Мне это нужно для файла, который состоит из пар символов, разделенных пробелами, следующим образом:

cc cc cc cc cc cc
cc cc cc cc cc cc
cc cc cc cc cc cc
cc cc cc cc cc cc

c может быть любым символом, включая пробел!Попытка:

ifstream myfile("myfile.txt");
int numPairs = 24;
string myarray[numPairs];

for( int i = 0; i < numPairs; i++) {
    char read;
    string store = "";

    myfile >> read;
    store += read;

    myfile >> read;
    store += read;

    myfile >> read;

    myarray[i] = store;
}

Проблема в том, что при этом просто пропускаются пробелы, что приводит к неправильным значениям.Что мне нужно изменить, чтобы он распознавал пробелы?

Ответы [ 2 ]

2 голосов
/ 02 октября 2011

Это ожидаемое поведение, поскольку operator>> по умолчанию пропускает пробелы.

Решение состоит в том, чтобы использовать метод get, который представляет собой операцию низкого уровня, которая считывает необработанные байты из потока безформатирование.

char read;
if(myfile.get(read)) // add some safety while we're at it
    store += read; 

Кстати, VLA (массивы с непостоянным размером) не являются стандартными в C ++.Вы должны либо указать постоянный размер, либо использовать контейнер, такой как vector.

1 голос
/ 02 октября 2011

Если ввод точно такой, как вы говорите, будет работать следующий код:

ifstream myfile("myfile.txt");
int numPairs = 24;
string myarray[numPairs];

EDIT: if the input is from STDIN
for( int i = 0; i < numPairs; i++) {
    myarray[i] = "";
    myarray[i] += getchar();
    myarray[i]+= getchar();
    getchar(); // the space or end of line

}

EDIT: If we don't now the number of pairs beforehand
      we shoud use a resizable data structure, e.g. vector<string>
vector<string> list;
// read from file stream
while (!myfile.eof()) {
    string temp = "";
    temp += myfile.get();
    temp += myfile.get();
    list.push_back(temp);
    myfile.get();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...