如何用C编写在文件内查找一个字符串

如何用C编写在文件内查找一个字符串,第1张

这需要使用匹配算法来实现,具体参考代码如下:
#include <stdioh>
#include <stdlibh>

#define stringSize(string) (sizeof(string) sizeof(char))

void contains(char , int, FILE );

int main(void) {
FILE fp;
char fileName = "atxt";
char str[] = "beautiful";

if((fp = fopen(fileName, "rb")) == 0) {
printf("Can't open %s, program will to exit", fileName);
exit(1);
}
contains(str, stringSize(str), fp);
fclose(fp);
return 0;
}

void contains(char string, int stringSize, FILE fp) {
int i = 0, j, end;
char part = (char )calloc(stringSize, sizeof(char));
fseek(fp, 0L, SEEK_END);
end = ftell(fp) - stringSize + 2;

while(i < end) {
j = 0;
fseek(fp, (long)i++, SEEK_SET);
fgets(part, stringSize, fp);
while(part) {
if(string == part) {
j++;
string++;
part++;
continue;
}
break;
}
if(j == stringSize - 1) {
printf("OK\n");
break;
} else {
string -= j;
part -= j;
}
}

free(part);
}
注意事项:
1、如果程序输出 OK 则代表这个文件中包含该字符串,无任何输出则代表不能匹配该字符串。
2、如果一个字符串在文件中是以换行分隔的,则不能匹配。

#include <stdioh>
#include <stdlibh>
void copyFile()
{
FILE in, out;
char ch ;
if ((in = fopen("d:\\wenjian\\intxt","r")) == NULL) //intxt 和outtxt 都在当前工作目录下存放
{
printf("canot find the file!\n");
exit(0);
}

if ((out = fopen("d:\\wenjian\\outtxt","w"))==NULL) // 写入数据的文件
{
printf("canot find the outtxt file !\n");
exit(0);
}
ch = fgetc(in);
while (ch!=EOF)
{
fputc(ch,out);
putchar(ch); //是intxt 的内容显示在dos窗口 下
ch = fgetc(in);
}
fclose(in); // 关闭文件
fclose(out);
}
int main()
{
copyFile() ;
puts("");
return 0;
}
我写的代码参考下。

代码文本:

#include "stdioh"

#include <stringh>

struct STU{

char nm[21],id[12];

int s[5];

};

int main(int argc,char argv[]){

struct STU stu;

char ts[21];

FILE fp;

if(fp=fopen("studat","r")){

printf("Please enter a name or ID\n");

scanf("%20s",ts);

printf("\nTo find the result is:\n");

while(fscanf(fp,"%s%s%d%d%d%d%d",stunm,stuid,stus,stus+1,stus+2,stus+3,stus+4)!=EOF)

if(strcmp(ts,stunm)==0 || strcmp(ts,stuid)==0){

printf(" %s\t%s%4d%4d%4d%4d%4d\n",stunm,stuid,stus[0],stus[1],stus[2],stus[3],stus[4]);

fclose(fp);

return 0;

}

printf("Not find\n");

fclose(fp);

}

else

printf("Open the file failure, exit\n");

return 0;

}

用dos命令就行啊,如果你真要用C,就把DOS命令嵌入C代码中吧,这个最简单
首先加上头文件:
#include"stdlibh"
#include"stdioh"
int main(int argc,char argv[])
{char inpu[128]="dir "; int i;
system("graftabl 936");
system("echo on");
system("cls");
for(i=4;i<128;i++)
{inpu[i]=argv[1][i-4];
if(inpu[i]=='\0') break;
}
system(inpu);
system("pause");
/到这里就把DOS命令DIR嵌入到C语言中了,另外还能加入一些DOS开关,能使输出结果不同具体见cmd 下的help dir/
}
输出结果和输入DIR一样:
驱动器 C 中的卷没有标签。
卷的序列号是 4C02-5551
c:\WINDOWS 的目录
2007-08-23 18:32 <DIR>
2007-08-23 18:32 <DIR>
2006-12-07 20:48 0 0log
2006-11-16 20:43 <DIR> addins
2006-06-23 17:07 176,128 amcapexe
2006-11-16 20:43 <DIR> AppPatch
2004-06-06 14:13 82,944 clockavi
2006-11-16 20:51 200 cmsetacllog
2007-08-23 17:45 350,057 comsetuplog
2006-11-16 20:43 <DIR> Config
2006-11-16 20:43 <DIR> Connection Wizard
2006-11-16 20:55 0 controlini
2006-11-16 20:43 <DIR> Cursors
2006-11-16 20:43 <DIR> Debug
2004-06-06 14:14 2 desktopini
2006-12-07 20:40 794 DirectXlog
2006-11-16 20:43 <DIR> Driver Cache
2007-08-23 16:20 641 DtcInstalllog
2006-11-16 20:43 <DIR> ehome
2004-08-04 08:52 976,896 explorerexe

您好,非常荣幸能在此回答您的问题。以下是我对此问题的部分见解,若有错误,欢迎指出。1打开c:\windows,Ctrl+F打开搜索功能
2在搜索栏选择“文档(文字处理,电子数据表等)”-“更多高级选项”-选中“搜索隐藏文件和文件夹”
3在“完整或部分文档名”中输入 a ,然后开始“搜索”
4等搜索停止后,全选搜索出来的文件(Ctrl+A),复制Ctrl+C,打开d盘粘贴Ctrl+V
2楼的方法也行非常感谢您的耐心观看,如有帮助请采纳,祝生活愉快!谢谢!

直接使用电脑自带的搜索功能,搜索完成后按照大小排序进行查找,具体 *** 作步骤如下:

1、点击打开电脑上的“计算机”;

2、在搜索窗口输入c,自动搜索;

3、搜索完成后,在任一位置处右击鼠标,选择“排序方式”选项,点击“大小”即可。

从文件中查找数据并输出,按以下步骤 *** 作:

打开文件,如果文件未找到,报错,结束   fopen

输入待查的字符串,存到变量中          gets

逐行循环读取文件,直到文件结束     fgets

检查字符串是否在该行中,如果在,则输出该行,关闭文件,结束。否则继续查找 strstr

循环结束,输出未找到该字符串。

关闭文件。fclose

相关代码和运行效果如下图:


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/10325275.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-07
下一篇 2023-05-07

发表评论

登录后才能评论

评论列表(0条)

保存