2011-04-12 3 views
0

В C++ можно ли читать из файла, который содержит целые числа и хранить его в массиве char []?char array в C++

+0

Да, вы можете. Вы лучше объясняете свой желаемый вход и выход? –

+0

Согласовано - в частности, хотите ли вы форматировать или неформатированный ввод-вывод. – ildjarn

+0

Внутренне это означает, что целые числа хранятся в формате ASCII ?! – sasi

ответ

0

Да. Пока ваши целые числа достаточно малы, чтобы быть представленными в виде байта. Если нет, то они, скорее всего, будут потеряны.

3

Да, можно сохранять номера из файла в массив char:

#include <fstream> 
#include <iterator> 
#include <algorithm> 

int main(int argc, char* argv[]) 
{ 
    std::ifstream in("input.txt"); 
    char arr[100]; 
    char* end = std::copy(std::istream_iterator<int>(in), 
          std::istream_iterator<int>(), 
          arr); 
    return 0; 
} 

Есть две проблемы. Во-первых, во время компиляции вы должны знать размер вашего массива. Два, каждый из входных номеров должен вписываться в char. Обратите внимание, что это отформатированный вход, поэтому допустимый диапазон не равен 0-255 или даже 0-127. Это допустимый символ, поэтому «0», «2», «a», «C» и т. Д. Являются допустимыми вводами для каждого символа.

Возможно, вы хотите прочитать свой файл в формате std::vector<std::string>?

#include <fstream> 
#include <iterator> 
#include <algorithm> 
#include <vector> 
#include <string> 

int main(int argc, char* argv[]) 
{ 
    std::ifstream in("input.txt"); 
    std::vector<std::string> vec; 
    std::copy(std::istream_iterator<int>(in), 
       std::istream_iterator<int>(), 
       std::back_inserter(vec)); 
    std::transfrom(vec.begin(), vec.end(), 
        vec.begin(), 
        my_transform()); 
    return 0; 
} 

Здесь мы читаем числа в std::vector<std::string>. Затем мы обрабатываем каждое строковое представление числа посредством функтора my_transform. Вы определяете функтор как простую структуру, которая определяет std::string operator()(const std::string&). Оператор функции-вызова принимает число и, как ожидается, возвращает манипуляцию с номером, однако вы хотите изменить его.

+0

Обновлено, чтобы отразить использование 'std :: vector ' вместо массива 'char', потому что я думаю, что это именно то, что вы действительно хотите. – wilhelmtell