访问特定的列/行并与另一个进行比较(C ++)

时间:2013-06-05 01:10:49

标签: c++ row

我正在尝试将文本文件作为输入,例如,六列和二十行,并根据文本文件中的数据进行各种计算。

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

1 个答案:

答案 0 :(得分: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;
  }
}

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