gpt4 book ai didi

c - 在c中将字符串从一个文件搜索到另一个文件

转载 作者:行者123 更新时间:2023-11-30 17:49:58 26 4
gpt4 key购买 nike

我有一个文本文件(names.txt),其中包含单个名称,例如:

mary
john
kj
mark

我试图将它们与另一个文本文件(records.txt)中的其他数据进行匹配,它看起来像这样:

mary jon mik 200 west 90
fgg gh 400 east 700
james ggg 890 south 800
john nike 556 4666

正在读取names.txt并根据records.txt运行名称,如果名称与records.txt中的整行匹配,则打印。当我从 CL 中一一输入名称时,这是可以的。但是当我从文本文件中调整代码以执行上述操作时,它不起作用。有人可以指出我正确的方向吗?这是我的代码:

/*program to search for a given string from a file*/
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

int usage(char*argv[]);


int main (int argc,char*argv[])
{
int flag=0,i=0;
FILE*fp,*lp;
char line[50];
char word[10];

lp=fopen(argv[1],"r");
fp=fopen(argv[2],"r");

if (argc!=3) {
usage(argv[0]);
exit(0);
}

if (lp==NULL || fp==NULL) {
perror("can't open file");
exit(1);
}


//getting words to search

while (fgets(word,10,lp)!=NULL) {

for(i=0;i<=strlen(word);i++){
if(word[i]=='\n'){
word[i]='\0';
break;
}
}
printf("searching for %s in %s ",word,argv[2]);
//searching in file
i=0;
while (fgets(line,50,fp)!=NULL) {
i++;
if(strstr(line,word)!=NULL){
printf("%s found in line %d\n%s.\n",word,i,line);
flag=1;
}
}
if(flag==0)
puts("no match found");
flag=0;
}
putchar('\n');
exit(0);

}
int usage(char*argv[])
{
printf("usage:\n<argv> <source file> < search file>\n");
return 0;
}

运行上面的代码,得到的结果是:

  searching for mary
in records.txt
jon mik mary 56 567

mary found in line 1
jon mik mary 56 56

searching for john
in records.txt
no match found
searching for kj
in records.txt
no match found
searching for mark in records.txt
no match found

最佳答案

第一个问题是您没有从 word 末尾删除空格,然后您还附加了一个空格,我不确定为什么。如果每次读取新行时迭代 word 并将第一个 \n 替换为 \0 ,只需进行最小的更改即可解决此问题。

第二个问题是您仅迭代第二个文件的内容一次,因此您仅将 names.txt 中的单词与 records.txt 中的第一行进行比较

您还需要将flag重置回0

关于c - 在c中将字符串从一个文件搜索到另一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17536189/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com