Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;将矩阵样式的文本文件读入二维数组,只保留数字块 我确信这是一个非常简单的任务,但是我在C++上是非常新的,所以这对我来说有点棘手。p>_C++_Arrays_Digit - Fatal编程技术网

C++;将矩阵样式的文本文件读入二维数组,只保留数字块 我确信这是一个非常简单的任务,但是我在C++上是非常新的,所以这对我来说有点棘手。p>

C++;将矩阵样式的文本文件读入二维数组,只保留数字块 我确信这是一个非常简单的任务,但是我在C++上是非常新的,所以这对我来说有点棘手。p>,c++,arrays,digit,C++,Arrays,Digit,无论如何,我有一个文本文件,它已经是一个25x14数组的形式(或者在我弄清楚代码后更大)。不幸的是,有些行只有一个条目,即单词 < >我想做的是移动文本文件,把每个条目(不包括行的单词)映射成C++中的简单数组,这样我就可以创建直方图,等等。 我计划用isdigit()函数来实现这一点 以下是我到目前为止的情况: using namespace std; int main() { int str; int matrix[25][14]; ifstream inFil

无论如何,我有一个文本文件,它已经是一个25x14数组的形式(或者在我弄清楚代码后更大)。不幸的是,有些行只有一个条目,即单词

< >我想做的是移动文本文件,把每个条目(不包括行的单词)映射成C++中的简单数组,这样我就可以创建直方图,等等。 我计划用isdigit()函数来实现这一点

以下是我到目前为止的情况:

using namespace std;

int main()
{
    int str;
    int matrix[25][14]; 

    ifstream inFile("inputfile.txt");

    while (inFile >> str) {
        for (int i = 0; i < 25; i++) {
            for (int j = 0; j < 14; j++) {                  
                if (isdigit(inFile)) {
                    inFile >> matrix[i][j];
                }
            }
        }
    }
}
使用名称空间std;
int main()
{
int-str;
整数矩阵[25][14];
ifstream infle(“inputfile.txt”);
while(infle>>str){
对于(int i=0;i<25;i++){
对于(int j=0;j<14;j++){
if(isdigit(填充)){
填充>>矩阵[i][j];
}
}
}
}
}
这肯定会带来很多错误。我的问题是我需要一个函数,它可以一次查看txt文件一个字(用空格表示)

有什么建议吗


谢谢

让您的文件每行有2个数字

1 2
2 3 
4 5
istringstream将获取数字并将其存储在变量中

#include <sstream>
#include <string>

std::string line;
while (std::getline(infile, line))
{
    std::istringstream iss(line);
    int a, b;
    if (!(iss >> a >> b)) { break; } // error

    // process pair (a,b)
}
#包括
#包括
std::字符串行;
while(std::getline(infle,line))
{
标准::istringstream iss(线);
INTA,b;
如果(!(iss>>a>>b)){break;}//错误
//进程对(a、b)
}

我知道它不是矩阵表示法,但可能会帮助您

您可以这样做:

首先定义一个简单的函数:

bool is_a_bad_line(const std::vector<int>& l)
{
  return l.size() < 14;
}
bool是一条坏线(const std::vector&l)
{
返回l.size()<14;
}
然后:

std::vector< std::vector<int> > data;
std::ifstream f("inputfile.txt");
std::string line;
while(std::getline(f,line))
{
  std::vector<int> line_data;
  std::istringstream iss(line);
  int value;
  while(iss >> value)
    line_data.push_back(value);
  data.push_back(line_data);
}
std::remove_if(data.begin(), data.end(), is_bad_line);
std::vector数据;
std::ifstream f(“inputfile.txt”);
std::字符串行;
while(std::getline(f,line))
{
std::矢量线数据;
标准::istringstream iss(线);
int值;
而(iss>>值)
行数据。推回(值);
数据。推回(行数据);
}
std::remove_if(data.begin()、data.end()、is_bad_line);

请参阅,以便更好地理解行为。

为什么不在while循环之后测试
line.size()=14
,然后将其推回,而不是始终添加,然后在最后测试并删除?谢谢!我终于按照你的建议成功了,谢谢@user4581301:这是为了模块化。使用此实现,可以很容易地更改容器,或者更改已删除行上的约束。但循环内部的解决方案也是正确的。事实上,我在调用
std::remove\u时犯了一个错误,如果
,它现在被更正了。