Я пользователь Mac Xcode (3.2.2), работаю с компилятором GCC 4.2, довольно неопытен в C ++ и совершенно не осведомлен о компиляторах.
Мне нужно читать цифры из внешнего файла ихранить их в векторе целыхЯ написал код с использованием потоков и getline ().Я могу скомпилировать код, и он работает без ошибок, но нет вывода.Это работает для друга (не Mac и не GCC 4.2 компилятор), хотя.
Я немного погуглил и нашел несколько сообщений о возможной проблеме компилятора (gcc, Apple) в Xcode 3.2.1, которая может иметь отношение кк моей проблеме (эта, например: C ++ с использованием getline () печатает: освобождаемый указатель не был выделен в XCode. Однако у меня есть Xcode 3.2.2. Я попробовал предложенные исправления (связанные с добавлением _GLIBCXX_FULLY_DYNAMIC_STRING в (1)окно настроек цели или (2) как макросы препроцессора перед включением), но моя проблема все еще не решена.
Так что я не знаю, в чем моя проблема на данный момент - является ли это тот же компиляторпроблема, которая была у людей в Xcode 3.2.1, но в 3.2.2 требуется другое исправление, или если в моем коде есть какая-то другая проблема.
Было бы замечательно, если бы кто-то мог дать какой-то совет.Это слишком просто. Если есть другой способ импортировать числа из внешнего файла, я хотел бы знать об этом. Кроме того, кто-нибудь знает, будет ли какая-либо причина, по которой яВозможно ли импортировать данные из файла .dat, но не из файла .txt на Mac?
Спасибо.
С момента первой публикации я включил правки Вильгельмтелла.
Цель: чтение чисел из текстового файла в вектор целых чисел, называемый «результаты».
1) Данные в файле данных test.dat изначально выглядели как
// Test
test
'1' '2' '3'
// В текстовом файле также есть ярлыки и комментарии, которые я не хочу читатьв, но не может удалить из файла.
#include <algorithm>
#include <cctype>
#include <iterator>
#include <fstream>
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
using namespace std;
// Edited: added struct (wilhelmtell's advice)
struct not_digit_and_not_whitespace {
bool operator()(char c) const {
return ! std::isdigit(c) && ! std::isspace(c);
}
};
int main()
{
system("pwd");
std::string line;
const std::string fileName = "/Users/me/test.dat";
ifstream theStream( fileName.c_str() );
if( ! theStream )
std::cerr << "Error opening file test.dat\n";
std::getline( theStream, line );
// line.erase(remove( line.begin(), line.end(), '\'' ), line.end() ); // Edited (wilhelmtell's advice)
line.erase(remove_if( line.begin(), line.end(),not_digit_and_not_whitespace()), line.end() ); // Edited: added (wilhelmtell's advice)
std::istringstream myStream( line );
std::vector<int> numbers((std::istream_iterator<int>(myStream)), std::istream_iterator<int>());
std::copy(numbers.begin(), numbers.end(),
std::ostream_iterator<int>(std::cout, "\n"));
/* int temp; // Edited: wilhemtell suggested using iterators instead.
while ( myStream >> temp ){
numbers.push_back( temp );
std::cout << temp << std::endl;
}*/
return 0;
}