从0开始<九> 字符串相关:grep函数的简单实现

<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;
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值