【发布时间】:2019-10-04 08:41:16
【问题描述】:
我想找到重复的整数并用空格替换它们的位置。这是我的作业。但是我没有解决这个问题。 我的代码是
int main(){
int control_integer;
int temp_integer;
int flag = 0;
int location;
char space = ' ';
char control_end_of_file;
FILE *fp,*tp;
fp = fopen("file.txt","r+");
while(!feof(fp))
{
fscanf(fp,"%d",&control_integer);
printf("control_integer: %d\n",control_integer );
while(!feof(fp)){
fscanf(fp,"%d",&temp_integer);
printf("temp_integer = %d\n",temp_integer );
if (temp_integer == control_integer)
{
flag = 1;
printf("girdi integer: %d\n",temp_integer );
fprintf(fp, " %c ",space );
}
}
}
return 0;
}
我计划我的功能如下。首先,我在文件中获取一个元素,然后进入一个新循环并查看下一个元素。如果相等,我想用空格替换它。但是问题就出现在这里。 * fp,执行读取操作时,传递了下一个元素,但我想阻止它并将其他内容写入该位置。所以我想在同一个地方写和删除。我尝试了一些东西,但我做不到。
【问题讨论】:
-
这是最慢的解决方案。看看 fseek(...)。您可能还需要考虑:先读取整个文件,更改内存中的内容,将整个文件写入磁盘,替换或覆盖现有文件
-
您使用的是 POSIX 系统(linux/unix 等)吗?如果是,在这种情况下我更喜欢
mmap(2)。 -
(1) 你应该记录你已经看到的数字,这样你就不必从头开始重新扫描(使用
malloc()等的动态内存分配——你有吗?了解这些了吗?)(2)您通常会使用fseek()和ftell()重新定位读/写指针。在读取数字之前,您需要跟踪当前位置;读取数字后的当前位置;然后如果是重复,则返回到前位置并写入适当数量的空格以返回到后位置。或者,最好将唯一编号复制到新文件中。 -
好的,我会尽快尝试,谢谢。我想在没有数组的情况下这样做。
标签: c file pointers memory-management