我正在尝试获取从文件中读取的一组字符并将它们存储到数组中。
假设我正在从字符串MICHAEL
中提取每个字母inputFile
:
int limit = 7;
for(int number = 0; number < limit; number++){
inputFile >> stepc_char;
cout << stepc_char << endl;
}
我想将它们存储到一个数组中。我怎样才能做到这一点?
(注意我不能用std::vector
)
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;
}
假设这个序列不会保存一个公共字符串(这意味着这std::string
不是你要找的),那么std::vector
在这种情况下似乎是保存这个序列的最合适的方式。
但是由于您添加了一个不允许使用的约束std::string
,那么(为了避免您自己处理内存管理)我建议可变长度数组(如果它们可用)(即如果您使用 GCC ,请参阅为什么可变长度数组不是 C++ 标准的一部分?):
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