include
define m 1024
int count(char *c, char *a, char *b);
int carry(int j, char *c, char temp);
int main()
{
int i, j;
FILE *file1 = fopen("./1.txt", "r");//打开文件1。
if (NULL == file1)
{
perror("fopen1");
return 1;
}
int count1 = 0;
char a[m] = {0};
count1 = fread(a, sizeof(char), 1024, file1);//读出文件1中的数据。
if (0 == count1)
{
perror("fread1");
fclose(file1);
return 2;
}
fclose(file1);
FILE *file2 = fopen("./2.txt", "r");//打开文件2。
if (NULL == file2)
{
perror("fopen2");
return 2;
}
int count2 = 0;
char b[m] = {0};
count2 = fread(b, sizeof(char), 1024, file2);//读出文件2的数据。
if (0 == count2)
{
perror("fread2");
fclose(file2);
return 3;
}
fclose(file2);
FILE *file3 = fopen("./3.txt", "w");//创建文件3。
if (NULL == file3)
{
perror("fopen3");
return 4;
}
int count3 = 0;
char c[m] = {0};
count(c, a, b);//将文件1中的数据与文件2中的进行相关处理。
count3 = fwrite(c, sizeof(char), 1024, file3);//将处理得到的数据写入文件3中。
if (0 == count3)
{
perror("fwrite");
fclose(file3);
return 5;
}
fclose(file3);
return 0;
}
//接下来就是相关的处理函数部分。
int count(char *c, char *a, char *b)
{
int i, j;
char temp = 0;
for (i = 0, j = 0; i < m; i++)
{
//读出的文件1中的数据以及文件2中的数据,我们可能碰到的字符,分别是:空格,数字,换行。我们需要对相应的情况作出不同的处理过程。
if (a[i] >= 48 && b[i] >= 48)//如果两边的都是数字,那么久进行相加操作。但这里要注意可能出现进位的问题。
{
temp = (a + i) + (b + i) - ‘0’;
if (temp > 57)
{
if (0 == i)
{
c[j] = ‘1’;
c[++j] = temp - 10;
j++;
}
else
{
carry(j, c, temp);//普遍状况下的进位函数。
j++;
}
}
else
{
c[j] = temp;
j++;
}
}
else if (a[i] < 48 && b[i] < 48)//遇到空格或者换行。
{
c[j] = *(a + i);
j++;
}
else
{
a[i] < 48 ? (c[j] = (b + i)) : (c[j] = (a + i));
j++;
}
}
return 0;
}
//相关的进位函数,这里运用递归。当有进位时将进位与前一位相加,得出进位后的数存入数组中。
int carry(int j, char *c, char temp)
{
int t = (j - 1);
c[j] = temp - 10;
if (c[t] + ‘1’ > 57 && t > 0)
{
carry(t, c, temp);
c[t] = c[t] + ‘1’ - 10;
}
else
{
c[t] = c[t] + ‘1’ - ‘0’;
}
return 0;
}