我有一个由许多行组成的文件,其中每行包含两个值,如:
53539 14390
14390 49489
52882 49489
23623 14390
23623 7554
23678 14390
.
.
.
我写了一个c代码来读取这些行并将它们存储在两个表T1和amp; T2其中:
T1[0][1]= 53539 & T2[0][1]= 14390
T1[1][1]= 14390 & T2[1][1]= 49489
T1[2][1]= 52882 & T2[2][1]= 49489
.
.
.
一切都很好......我知道我可以将两个值存储在一个表中,但我认为我的程序最好定义两个不同的表,尤其是出于以下目的
我尝试做的第二件事是搜索所有值,并指定和统计两个表中的未重复值的数量(我的意思是两列中的唯一值,这两个表中的值只出现一次),如我的例子:未重复的值是:53539,52882,7554& 23678所以这个数字是4
问题我的代码的第二部分没有以良好的方式工作,它给了我错误的值,我试图解决它,但它仍然没有工作!!
我知道我的问题对所有程序员来说都很容易,但实际上我是c和编码的初学者。
您可以在我的代码尝试下方看到:
#include <stdio.h>
#include <stdlib.h>
#define nOfLines 6
int main()
{
FILE *file;
int i, j, ii, jj;
int T1[nOfLines][1], T2[nOfLines][1];
file=fopen("ngc.txt","r");
for(i=0; i < nOfLines ; i++) {
fscanf(file,"%d %d", &T1[i][1], &T2[i][1]);
printf("%d %d\n ", T1[i][1], T2[i][1]);
}
int z=0;
for(i=0; i < nOfLines ; i++) {
for(j=0; j < nOfLines ; j++) {
if ((T1[i][1] == T1[j][1]) || (T1[i][1] == T2[i][1]) || (T2[i][1] == T2[j][1]))
{
break;
}
printf("%d %d\n", T1[i][0], z);
z++;
printf("%d %d\n", T2[i][1], z);
z++;
}
}
fclose(file);
return 0;
}
P.S:我写了一个循环,因为我有大量的行,因此无法在此代码中输入插入每个值 ALSO 我尝试做类似的事情:
if (!found(T1[i][1])) {printf("%d %d\n", T1[i][1], z);z++;}
if (!found(T2[i][1])) {printf("%d %d\n", T2[i][1], z);z++;}
但它不起作用!!
提前感谢任何形式的帮助......
答案 0 :(得分:1)
将所有值存储在选项卡中,就像您一样。然后,您可以遍历该选项卡并将每个值与其他值进行比较。让我们说你的标签设置了值,这是你可能做的一个例子:
void deleteRepeatedValues(int* tab)
{
int size = strlen(tab);
for (int i = 0; i != size; i++) // For each value of the tab
{
if (tab[i] != 0) // If the value hasn't already be set to 0
{
for (int j = i; j != size; j++)
{
if (tab[i] == tab[j]) // We verify that the value after aren't the same
tab[j] = 0; // If they are, we set them to 0
}
}
}
}
然后你可以编写一个函数来创建一个没有数组零值部分的新数组。这样的事情:
deleteRepeatedValues(tab);
int size = sizeof(tab);
int correctedTab[size];
int i = 0;
int y = 0;
while(i != size)
{
if (tab[i] != 0) // If the value is not repeated
{
correctedTab[y] = tab[i]; // We copy it
y++; // And advance in the corrected tab
} // Otherwise we don't
i++; // And only go further in `tab`
}
到目前为止,我无法测试此代码,并且我还没有尝试将其调整为您已经完成的操作。这是一种做你想做的事情的暗示。
另外,我建议你测试打开和关闭文件是否成功。它可以避免很多问题。