C++ 读取字符串文本输入以创建二维向量

C++ 读取字符串文本输入以创建二维向量,c++,algorithm,stdvector,C++,Algorithm,Stdvector,给定以下内容的常规文本文件: 56789 28385 43285 22354 34255 我试图读取文本文件中的每个字符串,并将它们存储在二维向量中 首先,我想取每一行字符串。然后我想将行中的每个字符转换成int,然后将_推回行中。然后我想每行重复一遍 在输出2D向量中的每一列和每一行时,我希望得到相同的精确输出: 56789 //each number an int now instead of a string 28385 43285 22354 34255 我的问题是我试图使用I=st

给定以下内容的常规文本文件:

56789
28385
43285
22354
34255
我试图读取文本文件中的每个字符串,并将它们存储在二维向量中

首先,我想取每一行字符串。然后我想将行中的每个字符转换成int,然后将_推回行中。然后我想每行重复一遍

在输出2D向量中的每一列和每一行时,我希望得到相同的精确输出:

56789 //each number an int now instead of a string
28385
43285
22354
34255
我的问题是我试图使用
I=stoi(j)给出错误:

No matching function for call to 'stoi'
我确实有正确的
#include
,能够使用
stoi()

矢量读取文件(常量字符串和文件名)
{
字符串文件,行;字符串流转换;int_转换,计数器;
矢量点_矢量;
文件=文件名;
_文件中的ifstream;
打开(文件);
while(getline(在文件中,第行)){
计数器+++;//文件中有多少行
}
字符当前字符;
while(getline(在文件中,第行)){
对于(int i=0;i
这里

需要一个字符串作为参数,您提供的是一个
int

您可以将字符转换为字符串,然后调用
std::stoi
,如下所示

std::string CharString(1, line[j]);
dot_row.emplace_back(std::stoi(CharString));
或者可以直接将字符转换为int,同时保持向量:

dot_row.emplace_back(static_cast<int>(line[j] - '0'));

std::stoi
要求您包括
。在计算文件中的所有行数后,文件指针将显示在末尾。还有,
counter
到底是做什么的?@johnnymapp我想用counter来读取行数,所以当我在for循环中迭代时,范围只会迭代到计数器。有更方便的方法吗?我不明白你为什么需要
计数器<代码>while(getline(在_文件中,line)){
应该足够了。@Johnnympp收到了,谢谢你的建议!谢谢!这很有帮助。为什么(第[j]-“0”行中需要-0@ DraCeP,因为在ASCII代码中,感谢您给出的反馈!这对读while循环和循环使用都有更大的意义。我使用2D向量和两个循环来感到有点困惑。@ DraCeP很高兴我能帮助您。但是,我强烈地希望,这可以帮助您更深入地理解C++。
std::string CharString(1, line[j]);
dot_row.emplace_back(std::stoi(CharString));
dot_row.emplace_back(static_cast<int>(line[j] - '0'));
while (getline(in_file, line)) 
{
    std::vector<int> dot_row; dot_row.reserve(str.size());
    for (const std::string& eachChar: line) 
    {
        std::string CharString(1, eachChar);
        dot_row.push_back(std::stoi(CharString));
        // or other option mentioned above
    }
    dot_vector.push_back(dot_row);
}