如何从文件中读取字符并将其存储到数组中?

时间:2013-03-21 01:23:01

标签: c++ arrays file character

我正在尝试从文件中读取一组字符并将它们存储到数组中。

让我们说我正在从我的MICHAEL中提取字符串inputFile中的每个字母:

int limit = 7;
for(int number = 0; number < limit; number++){
    inputFile >> stepc_char;
    cout << stepc_char << endl;
}

我想将它们存储到数组中。我怎么能这样做?
(请注意,我无法使用std::vector

2 个答案:

答案 0 :(得分:1)

I then want to store them into an array

好的,你已经将阅读部分缩小了,因为你当前的代码已经正确读取了。 将值存储到数组中:

// (With minimal changes to your code)
char* my_array = new char[limit];
for (int number = 0; number < limit; number++) {
    inputFile >> stepc_char;
    cout << stepc_char << endl;

    my_array[number] = stepc_char;
}

尽管你完成了它,但不要忘记delete[] my_array;。我这样分配内存而不是执行char my_array[limit];的唯一原因是因为给定的数组大小必须是常量。 (这是我从编译器中可以看到的)。

如果您无限期地需要数组,请在退出范围之前立即执行delete[] my_array;

例如,如果上面的代码在if块中,那么它应该是这样的:

if (someExpression) {

    char* my_array = new char[limit];
    for (int number = 0; number < limit; number++) {
        inputFile >> stepc_char;
        cout << stepc_char << endl;

        my_array[number] = stepc_char;
    }

    // process character array

    delete[] my_array;
}

答案 1 :(得分:0)

假设此序列不会包含公共字符串(意味着std::string不是您要查找的字符串),那么 std::vector 似乎在这种情况下,保持这个序列是最恰当的方式。

但是既然你添加了一个不允许使用std::string的约束,那么(为了避免自己处理内存管理)我会建议可变长度数组,如果它们是可用(如果您使用GCC,请参阅Why aren't variable-length arrays part of the C++ standard?):

char myArray[limit];
for(int i = 0; i < limit; i++)
{
    std::cin >> myArray[i];
}

请注意,在这种情况下,myArray是一个具有自动存储持续时间的数组,当执行超出声明范围时,其生命周期结束。

否则,您将不得不使用动态分配的数组:

char* myArray = new char[limit];
for(int i = 0; i < limit; i++)
{
    std::cin >> myArray[i];
}
delete[] myArray;                   // don't forget to clean it up