您的位置:首页 > 编程语言 > C语言/C++

C语言代码搜索神器for Mac

2016-06-18 20:28 417 查看
程序功能

精确搜索一个文件夹中的所有子文件夹中的指定类型文件中的指定字符串,搜索到某个文件中存在指定字符串,则将此文件路径直接输出在终端上。

操作方法

用X-Code编译完成将可执行文件拖到桌面上双击打开后根据提示操作。

代码如下

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int search(char a[],char searchString[])
{
int i,j,k,t=strlen(searchString),s=strlen(a)-t;
for(i=0;i<=s;i++)
{

for(j=i,k=0;k<t;k++,j++)
{
//忽略大小写判断单个字符是否一样,不一样则跳出
if(a[j]!=searchString[k]&&abs(a[j]-searchString[k])!=32)break;
}
if(k==t) return 1;
}
return 0;
}
int main()
{
/**要执行的find命令*/
char command[5000];
/**需要合并代码的文件夹路径*/
char folderPath[5000];
/**文件后缀名*/
char suffix[20];
/**存放所有搜索到的文件路径的临时文件,在这个文件中每个路径单独占一行,最后这个文件会被删除*/
char tempFile[5000];
/**临时文件的指针*/
FILE *fTempFile;
/**单个文件路径*/
char singleFile[5000];
/**单个文件的指针*/
FILE *fSingleFile;
/**存放单个文件中的所有内容*/
char singleFileContent[1000000];
/**要查找的字符串*/
char searchString[1000];
/**文件的数量*/
int fileNum;
int i;
char ch;
while(1)
{
printf("请拖入文件夹路径:");
scanf("%s",folderPath);
printf("请输入要合并文件的后缀(如.c,.txt):");
scanf("%s",suffix);
printf("请输入要查找的字符串(忽略大小写):");
scanf("%s",searchString);

//生成不完整的find命令
strcpy(command,"find ");
strcat(command,folderPath);
strcat(command," -name *");
strcat(command,suffix);
strcat(command,">>");
//生成临时文件的全路径
strcpy(tempFile,folderPath);
strcat(tempFile,"/temp.txt");
//生成完整的find命令
strcat(command,tempFile);
//执行Unix下的find命令,将搜索到的内容输出到temp.txt文件中
system(command);
fTempFile = fopen(tempFile,"r");
fileNum = 0;
while(1)
{
i=-1;
//每次得到一个文件的全路径
while((singleFile[++i]=fgetc(fTempFile))!=10&&singleFile[i]!=EOF);

if(singleFile[i]==EOF)
{
break;
}
singleFile[i]=0;//文件内容结尾标志
fSingleFile=fopen(singleFile,"r");//打开文件
i=0;
while((ch=fgetc(fSingleFile))!=EOF)
{
singleFileContent[i++] = ch;
}
singleFileContent[i] = 0;
if (search(singleFileContent,searchString)) {
fileNum++;
printf("\n%d:%s\n\n",fileNum,singleFile);
}

fclose(fSingleFile);
}
fclose(fTempFile);
//生成删除临时文件的命令
strcpy(singleFile,"rm ");
strcat(singleFile,tempFile);
system(singleFile);//删除临时文件
if(fileNum==0) printf("\n查询无结果!\n\n");

}
return 0;
}


结果如下

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: