gpt4 book ai didi

c++ - 从文件中读取数据并将每一行存储在数组中?

转载 作者:行者123 更新时间:2023-11-30 02:28:38 25 4
gpt4 key购买 nike

我有一个包含整数行的文件。我想将每一行读入数组中的一个槽中。我有下面的代码,但它不起作用。我不确定我是否在正确的轨道上。

void Read_Save() {
ifstream in;
int arr[100];
string line;
in.open("file.txt");
while (in.peek() != EOF)
{
getline(in, line, '\n');
strcpy(arr, line.c_str());
}
in.clear(); in.close();
}

最佳答案

有几种方法可以从字符串中解析出整数值。

首先,让我们修复你的循环:

int pos = 0;
while( std::getline(in, line) && pos < 100 )
{
int value = 0;

// Insert chosen parsing method here

arr[pos++] = value;
}

以下是常用选项的非详尽列表:

  1. 使用 std::strtol

    // Will return 0 on error (indistinguishable from parsing actual 0)
    value = std::strtol( line.c_str(), nullptr, 10 );
  2. 使用 std::stoi

    // Will throw exception on error
    value = std::stoi( line );
  3. 构建一个 std::istringstream 并从中读取:

    std::istringstream iss( line );
    iss >> value;
    if( !iss ) {
    // Failed to parse value.
    }
  4. 使用 std::sscanf

    if( 1 != std::sscanf( line.c_str(), "%d", &value ) )
    {
    // Failed to parse value.
    }

现在,注意循环检查中的边界测试 pos < 100 .这是因为您的阵列有存储限制。实际上,您还在 Read_Save 中用本地的覆盖了全局的。 ,因此将其隐藏在一个较小的数组中,该数组将在函数完成时丢失。

您可以使用标准库提供的其他容器类型来拥有任意大小的“数组”(实际上不是数组)。提供随机访问的有用的是 std::vectorstd::deque .让我们使用 vector 并更改 Read_Save 的定义更有用一点:

std::vector<int> Read_Save( std::istream & in )
{
std::vector<int> values;
std::string line;

for( int line_number = 1; getline( in, line ); line_number++ )
{
try {
int value = std::stoi( line );
values.push_back( value );
}
catch( std::bad_alloc & e )
{
std::cerr << "Error (line " << line_number << "): Out of memory!" << std::endl;
throw e;
}
catch( std::exception & e)
{
std::cerr << "Error (line " << line_number << "): " << e.what() << std::endl;
}
}

return values;
}

最后,调用变为:

std::ifstream in( "file.txt" );
std::vector<int> values = Read_Save( in );

关于c++ - 从文件中读取数据并将每一行存储在数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40539385/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com