/*此程序是将输入中包含特定“模式”或字符串的各行打印出来
这是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;
}