一个c语言难题,急求解答!

村里 2012-12-05 02:20:52
编写一个程序,它在一个文本文件中查找用户指定的字符串,如果找到,则指出位于那些行中。列如,如果在一个c源代码文件中查找“printf( )”,则程序应列出包含printf( )的所有行。
...全文
138 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
LheroPfire 2012-12-05
  • 打赏
  • 举报
回复
[code=css]#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define maxline 1000
int main(int argc,char *argv[]){
char line[20];
FILE *fp;
char *p;
p = (void *)malloc(30);
int i = 1;
if((fp = fopen(*++argv,"r")) == NULL){
printf("cann't open file!\n");
}
if(argc != 3){
printf("wrong!\n");
}
else{
while(fgets(line,maxline,fp)){
if(strstr(line,argv[1]) != NULL){
printf("found \"%s\" in line:%d\n",argv[1],i);
}
i++;
}
}
return 0;
}

前面不会上传代码,乱七八糟的
LheroPfire 2012-12-05
  • 打赏
  • 举报
回复
#include <stdio.h> #include <string.h> #include <stdlib.h> #define maxline 1000 int main(int argc,char *argv[]){ char line[20]; FILE *fp; char *p; p = (void *)malloc(30); int i = 1; if((fp = fopen(*++argv,"r")) == NULL){ printf("cann't open file!\n"); } if(argc != 3){ printf("wrong!\n"); } else{ while(fgets(line,maxline,fp)){ if(strstr(line,argv[1]) != NULL){ printf("found \"%s\" in line:%d\n",argv[1],i); } i++; } } return 0; }
赵4老师 2012-12-05
  • 打赏
  • 举报
回复
仅供参考
#include <stdio.h>
#include <string.h>
#define MAXLEN 1000
char ln[MAXLEN];
FILE *f;
int i,z;
int b,n,L;
int main(int argc,char **argv) {
    if (argc<2) {
        printf("Usage:%s fullpathfilename.ext\nget total blank/non-blank/total linenumbers.\n",argv[0]);
        return 1;
    }
    f=fopen(argv[1],"r");
    if (NULL==f) {
        printf("Can not open file [%s]!\n",argv[1]);
        return 2;
    }
    z=0;
    b=0;
    n=0;
    L=0;
    while (1) {
        if (NULL==fgets(ln,MAXLEN,f)) break;
        L=strlen(ln);
        if ('\n'==ln[L-1]) {
            if (0==z) {
                for (i=0;i<L-1;i++) {
                    if (!(' '==ln[i] || '\t'==ln[i])) break;
                }
                if (i<L-1) z=1;//当前行不是空行
            }
            if (0==z) b++; else n++;
            z=0;
        } else {
            if (0==z) {
                for (i=0;i<L;i++) {
                    if (!(' '==ln[i] || '\t'==ln[i])) break;
                }
                if (i<L) z=1;//当前行不是空行
            }
        }
    }
    fclose(f);
    if (L>0 && '\n'!=ln[L-1]) {
        if (0==z) b++; else n++;//最后一行末尾无'\n'也计算
    }
    printf("File:[%s] total blank/non-blank/total linenumbers is %d/%d/%d\n",argv[1],b,n,b+n);
    return 0;
}
Windows下的grep grep 多文件查找指定字符串 来自C:\Program Files\Borland\CBuilder6\Bin\ http://download.csdn.net/detail/zhao4zhong1/4381913
proorck6 2012-12-05
  • 打赏
  • 举报
回复
好像是grep的功能,这个在Linux上已经实现了。
nadleeh 2012-12-05
  • 打赏
  • 举报
回复
行I/O
wjain 2012-12-05
  • 打赏
  • 举报
回复
引用 2 楼 ywj1225 的回复:
C/C++ code?123456789101112131415161718192021222324252627282930313233343536#include <stdio.h>#include <stdlib.h>#include <string.h> #define BUFFER_ZISE 1024 int main(){ char line_buffe……

int line_num = 0;
失误,忘初始化了。。。。
wjain 2012-12-05
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define BUFFER_ZISE 1024


int main()
{
    char line_buffer[BUFFER_ZISE];
    FILE *file;
    char part[] = "test";
    
    file = fopen("test.txt", "r");
    if (NULL==file)
    {
        printf ("Open file fail.\n");
        return -1;
    }

    char *find;
    int line_num;
    while (!feof(file))
    {
        ++line_num;
        fgets(line_buffer, BUFFER_ZISE, file);
        find = strstr(line_buffer, part);
        if (find!=NULL)
        {
            printf ("Line %d\n", line_num);
        }
        
    }

    return 0;
}

xumaojun 2012-12-05
  • 打赏
  • 举报
回复
每次读出文件的一行,再在本行的数据buffer中查找目标字符串,如果存在打印行号,循环操作直到文件结束。

69,374

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧