查找打印出包含指定字符串的那一行

/*此程序是将输入中包含特定“模式”或字符串的各行打印出来

  这是UNIX程序grep 
  这个任务划分如下:
  
  while(还有没处理的行) 
     if(该行包含指定的模式)
         打印该行;  
  
  分析程序的整体架构 
*/
#include "stdio.h"
#define MAXLINE 1000 /*最大输入行*/

int getline(char line[] , int max);
int strindex(char source[] , char searchfor[]);

char pattern[] ="ould"; /*待查找的模式*/

main()
{
   char line[MAXLINE];
   int found=0;
   
   while(getline(line,MAXLINE)>0)
      if(strindex(line,pattern)>=0)
      {
         printf("%s",line);
         found++;                             
      }
   return found;
   
   
   
   
   
}

/*getline函数:将行保存在s中,返回该行的长度 lim应该是s数组的长度*/
int getline(char s[],int lim)
{
    int c,i;
    i=0;
    while(--lim>0 && (c=getchar())!=EOF && c!='\n')
       s[i++] = c;
       
    if(c=='\n')
       s[i++] = c;
       
    s[i] = '\0';
    
    return i;
    
}

/*strindex函数:返回t在s中的位置,如果未找到返回-1*/
int strindex(char s[],char t[])
{
    int i,j,k;
    
    for(i=0;s[i]!='\0';i++)
    {
       for(j=i,k=0; t[k]!='\0'&&s[j]==t[k]; j++,k++)
         ;
       if(k>0&&t[k]=='\0')
         return i;
                              
    }
    return -1;
    
}
















稍微修改

/*此程序是将输入中包含特定“模式”或字符串的各行打印出来

  这是UNIX程序grep 
  这个任务划分如下:
  
  while(还有没处理的行) 
     if(该行包含指定的模式)
         打印该行;  
  
  分析程序的整体架构 
*/
#include "stdio.h"
#define MAXLINE 1000 /*最大输入行*/

int getline(char line[] , int max);
int strindex(char source[] , char searchfor[]);

char pattern[] ="ould"; /*待查找的模式*/

main()
{
   char line[MAXLINE];
   int found=0;
   
   while(getline(line,MAXLINE)>0)
      if(strindex(line,pattern)>=0)
      {
         printf("%s",line);
         found++; 
         printf("%d\n",found);                           
      }
   return found;
   
   
   
   
   
}

/*getline函数:将行保存在s中,返回该行的长度 lim应该是s数组的长度*/
int getline(char s[],int lim)
{
    int c,i;
    i=0;
    while(--lim>0 && (c=getchar())!=EOF && c!='\n')
       s[i++] = c; /* 如果把c!='\n'这个条件去掉,会出现什么结果,结果是死循环
	                  所以'\n'是为了使输入字符串结束,结束循环,
					  也可以用输入一个标记数结束输入循环
				   */
       
    if(c=='\n')
       s[i++] = c;
       
    s[i] = '\0';
    
    return i;
    
}

/*strindex函数:返回t在s中的位置,如果未找到返回-1*/
int strindex(char s[],char t[])
{
    int i,j,k;
    
    for(i=0;s[i]!='\0';i++)
    {
       for(j=i,k=0; t[k]!='\0'&&s[j]==t[k]; j++,k++)
         ;
       if(k>0&&t[k]=='\0')
         return i;
                              
    }
    return -1;
    
}




  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值