我正在尝试将文本文件作为输入,例如,六列和二十行,并根据文本文件中的数据进行各种计算。
有没有办法能够访问代码中的特定列/行并将其与另一个列进行比较?我基本上试图看看有多少数字,比方说,第二列彼此相距+10,所以如果第二列是10 11 16 20 21 25 30 31 34 40 50,程序会给我解决方案10, 20,30,40,50和11,21,31。
答案 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;
}
}
上述算法仅在行中的整数按升序排列时才有效;如果不是,你必须取每个整数并将其与行中其余整数进行比较。