从文件中读取字符串,直到得到'\n';c/c+中的字符或EOF+;
我想打开两个文件并将这些字符串保存到第三个文件中,第一个文件中有这些字符串,但第二个文件中没有。 为此,我必须逐行读取字符串(即,直到到达下一行字符)。 但是对于文件的最后一行,我没有'\n',因为有EOF。因此,请帮助我读取文件的所有字符串,然后将其存储在字符数组中 代码:-从文件中读取字符串,直到得到'\n';c/c+中的字符或EOF+;,c,file-handling,C,File Handling,我想打开两个文件并将这些字符串保存到第三个文件中,第一个文件中有这些字符串,但第二个文件中没有。 为此,我必须逐行读取字符串(即,直到到达下一行字符)。 但是对于文件的最后一行,我没有'\n',因为有EOF。因此,请帮助我读取文件的所有字符串,然后将其存储在字符数组中 代码:- #include<stdio.h> #include<string.h> int main() { FILE *f1ptr,*f2ptr,*f3ptr; f1ptr=fopen("1stfile.
#include<stdio.h>
#include<string.h>
int main()
{
FILE *f1ptr,*f2ptr,*f3ptr;
f1ptr=fopen("1stfile.txt","r");
f3ptr=fopen("3rdfile.txt","w");
char arr1[100],arr2[100];
while(fscanf(f1ptr," %[^\n]",arr1)!=EOF)
{
f2ptr=fopen("2ndfile.txt","r");
int flag=1;
while(fscanf(f2ptr," %[^\n]",arr2)!=EOF)
{
if(strcmp(arr1,arr2) ==0)
{
flag=0;//flag=0 means i will not store this string into file
}
}
fclose(f2ptr);
if(flag)
fprintf(f3ptr,"%s\n",arr1);
}
return 0;
}
第二个文件
Minimum Points To Reach Destination
Maximum Index
Maximum of minimum for every window size
Find Prime numbers in a range
Largest Number formed from an Array
Find sum of different corresponding bits for all pairs
Rearrange an array with O(1) extra space
Return two prime numbers
Sorting Elements of an Array by Frequency
A Simple Fraction
QuickSort on Doubly Linked List
Reorder List
Binary Tree to DLL
Tree from Postorder and Inorder
Maximum Index
Find Prime numbers in a range
Rearrange an array with O(1) extra space
Return two prime numbers
Sorting Elements of an Array by Frequency
以下方法可能有效。如果使用fgets,最后一行将是add'\n'
#include<stdio.h>
#include<string.h>
//using namespace std;
int main()
{
FILE *f1ptr,*f2ptr,*f3ptr;
f1ptr=fopen("1stfile.txt","r");
f3ptr=fopen("3rdfile.txt","w");
char arr1[100],arr2[100];
while (fgets(arr1, 100, f1ptr) != NULL) {
f2ptr=fopen("2ndfile.txt","r");
int flag=1;
while (fgets(arr2, 100, f2ptr)!=NULL) {
if (strcmp(arr1,arr2) ==0) {
flag=0; //flag=0 means i will not store this string into file
}
}
fclose(f2ptr);
if (flag)
fprintf(f3ptr,"%s",arr1);
}
return 0;
}
#包括
#包括
//使用名称空间std;
int main()
{
文件*f1ptr,*f2ptr,*f3ptr;
f1ptr=fopen(“1stfile.txt”,“r”);
f3ptr=fopen(“3rdfile.txt”,“w”);
字符arr1[100],arr2[100];
while(fgets(arr1100,f1ptr)!=NULL){
f2ptr=fopen(“2ndfile.txt”,“r”);
int标志=1;
while(fgets(arr2100,f2ptr)!=NULL){
if(strcmp(arr1,arr2)==0){
flag=0;//flag=0表示我不会将此字符串存储到文件中
}
}
fclose(f2ptr);
国际单项体育联合会(旗)
fprintf(f3ptr,“%s”,arr1);
}
返回0;
}
这里有一个使用倒带()的解决方案。
如果您执行manfgets
,下面是描述的一部分:fgets()
从流中最多读入一个小于大小的字符,并将它们存储到s指向的缓冲区中。EOF或换行符后,读取停止。如果新行被读取,它将被存储到缓冲区中。在缓冲区中最后一个字符之后存储一个终止的空字节('\0'
)
因此,新行字符被添加到字符串中,而不是EOF。fopen()和第二个文件的fclose()应该被添加一次。使用rewind()将文件光标移动到顶部。始终检查fopen()是否成功。请提供输入示例和预期输出。为什么不读取第二个文件并将字符串放入双字符数组中:char arr2[100][100];100行就足够了吗?@Nishantsharma 1。将其中一个文件读入内存,这很简单。2.如果你更勇敢一点,你可以对内存中的行进行排序,并进行二进制搜索,而不是线性搜索。或者直接将文件读入二叉树;但是,如果文件中的行已经排序,那么这个解决方案就不好了,您需要一个更难编码的平衡二叉树。
f1ptr=fopen("1stfile.txt","r");
//Check f1ptr is not NULL.
f2ptr=fopen("2ndfile.txt","r");
//Check f2ptr is not NULL.
f3ptr=fopen("3rdfile.txt","w");
//Check f3ptr is not NULL.
char arr1[100],arr2[100];
while(fgets(arr1, sizeof arr1, f1ptr) )
{
int flag=1;
rewind(f2ptr); //Moves file pointer to the top.
while(fgets(arr2,sizeof arr2, f2ptr))
{
if(strcmp(arr1,arr2) ==0)
{
flag=0;//flag=0 means i will not store this string into file
break; //Break out of the loop if 2 files have the same line.
}
}
if(flag)
fprintf(f3ptr,"%s",arr1); //No need to print newline. Its already there.
}
fclose(f1ptr);
fclose(f2ptr);
fclose(f3ptr);