0

我试图将一个文本文件作为输入,比如说,六列二十行,并根据文本文件中的数据进行各种计算。

有没有办法能够访问代码中的特定列/行并将其与另一个进行比较?我基本上是想看看有多少数字,比如说,第二列彼此相距+10,所以如果第二列是10 11 16 20 21 25 30 31 34 40 50,程序会给我解决方案10, 20,30,40,50 和 11,21,31。

4

1 回答 1

1

听起来您可能希望利用此功能来做更多的事情,而不仅仅是弄清楚一行中的数字是否彼此之间有一定的距离,所以我将提供一个更通用的解决方案。

首先创建一个 20x6 的字符指针矩阵:

char *inputmatrix[20][6];

然后使用文件中的值加载矩阵。我们首先使用fgets从文件中获取整行,然后我们需要使用strtok根据空格解析该行。从那里我们需要使用 malloc 为每个元素创建空间,从 strtok 复制值(因为它在下一次调用 strtok 时被覆盖),然后将指针存储在我们的数组中:

char buffer[256];
char *value;
while(!feof(f)){
 if(!fgets(buffer,256,f))
   break;
 value = strtok(buffer," ");
 while(value != NULL){
   inputmatrix[currow][curcol] = (char*)malloc(strlen(value+1));
   memset(inputmatrix[currow][curcol],0,strlen(value+1));
   memcpy(inputmatrix[currow][curcol],value,strlen(value));
   curcol++;
   value = strtok(NULL," ");
 }
 currow++;
 curcol = 0;
}

现在我们已经有了一个字符串矩阵,我们可以遍历并运行任何你想要的算法。例如,要找出列中彼此相距 +10 的所有元素,我们必须首先确定该元素是否可以使用atoi转换为 int ,然后将其与列中的下一个 int 进行比较,等等在:

int curelement = -1, nextelement = -1;
for(int i=0;i<3;i++){
  for(int j=0;j<6;j++){
    if((nextelement = atoi(inputmatrix[i][j])) != 0){
      if(nextelement - curelement == 10){
        printf("row %i,: %i,%i\n",i,curelement,nextelement);
    }
    curelement = nextelement;
  }
}

上述算法只有在行中的整数是升序时才有效;如果不是,您必须获取每个整数并将其与行中的其余整数进行比较。

于 2013-06-05T20:44:25.857 回答