<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">程序一:grep函数的简单实现</span>
思路:先看流程,其中可用前面的getline实现未处理的行,然后编写函数strindex(s,t)实现该目标,至于打印部分使用printf函数即可
<span style="font-size:18px;">while (还有未处理的行)
{
if (改行包含指定的模式)
打印该行
}</span>
</pre><p><pre name="code" class="cpp"><span style="font-size:18px;">#include <stdio.h>
#define MAXLINE 1000
int getline(char line[], int max);
int strindex(char source[], char searchfor[]);
char pattern[] = "ould"; /*待查找的数*/
int main(void)
{
char line[MAXLINE];
int len;
while ( (len=getline(line,MAXLINE)) > 0)
{
if ( strindex(line,pattern) >= 0)
printf("%s",line);
}
return 0;
}
/*将行保存到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;
}
/*返回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++);
/*考虑一种情况,t为NULL,就会明白为什么k>0这个条件了,
当然可以在开头判断,看看别人写的程序和自己的比比,加油呀*/
if (k>0 && t[k]=='\0')
return i;
}
return -1;
}</span>
程序二:编写函数strindex(s,t),它将返回字符串t在s中最右边出现的位置,如果s中不包含t ,则返回 -1。
int strindex(char s[], char t[])
{
int i,j,k;
for (i=strlen(s)-strlen(t); i>=0; --i)
{
for (k=i,j=0; t[j]!='\0'&&t[j]==s[k]; ++k,++j);
if (j>0 && t[j]=='\0')
return i;
}
return -1;
}