您好,欢迎访问代理记账网站
移动应用 微信公众号 联系我们

咨询热线 -

电话 15988168939

联系客服
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

【c语言笔记】字符串关键字匹配算法

作者:小成Charles
商业工作,学习交流请添加Vx:Lcc-Triumph
原创作品
转载请标注原创文章地址:https://blog.csdn.net/weixin_42999453/article/details/115711676

Github代码下载地址:https://github.com/xiaocheng99/c_project

引言

这是一个学习C语言的笔记开篇,做一些简单有趣的c小程序。下面是C语言字符串关键字的匹配算法讲解笔记
在这里插入图片描述

一、主函数

这段代码块定义了一个全局变量pattern作为目标关键词,其中'\0'是字符串的结束标志。charline是从getline获取到的被匹配句子,while循环条件会一直进行字符串的输入,直到出现一个完整的句子就会执行strIndex函数来判断当前句子是否包含关键字,下面来讲解函数getLine和函数strIndex

#include <stdio.h>
#define MAXLINE 1000

char pattern[] = "charles\0";
int main()
{
	char charLine[MAXLINE];
	int found = 0;
	while (getLine(charLine, MAXLINE)>0)
	{
		//printf("keypress:%s", charLine);
		if (strIndex(charLine,pattern)>=0)
		{
			printf("\"loud\" postion:%s", charLine);
			found++;
		}
	}

	return found;
}

二、getLine函数

这里其实是进行字符串的输入,当输入为换行时,缓冲区会判断到为换行符'\n',这时候我们就判定为当前为一个句子,跳出循环,返回一个i,此时的i是大于零的,在主函数里面就是一个真值,如果当前为EOF(End Of File),即为结束(windows下按Ctrl+Z再回车),此时不返回值,在主函数里面就是假,不执行接下来的程序。

int getLine(char line[],int max)
{
	int c, i;
	i = 0;
	while (--max > 0 && (c=getchar())!=EOF && c!= '\n')
	{
	line[i++] = c;
	}
	if (c=='\n')
	{
		line[i++] = c;
		line[i] = '\0';
		return i;

	}
}

三、strIndex函数

这里是实现字符串匹配的主要算法逻辑,第一个for循环首先对字符串进行遍历,并且第二个for循环一直在对字符串与关键词的第一个字符进行比较,如果发现字符串的某一个字符和关键词的第一个字符相等,那么第二个for循环就会执行,去依次判断字符串后面几个和关键词的字符是否相同,由于关键词有一个‘\0’结束符,当完全匹配的时候,关键词字符串数组下标将会累加到结束符的下标,所以当关键词下标指向的字符为'\0'时,则找到所匹配的字符串,并且返回一个大于零的下标。主函数收到后,打印当前句子。

int strIndex(char source[],char serachfor[])
{
	int i, j, k;
	for (i = 0; source[i] != '\0'; i++)
	{
		for (j = i, k = 0; serachfor[k] != '\0'&&source[j] == serachfor[k];j++,k++);
		if (k>0&&serachfor[k]=='\0')
		{
			return i;
		}
	}
	return -1;
}

Github代码下载地址:https://github.com/xiaocheng99/c_project

作者:小成Charles
商业工作,学习交流请添加Vx:Lcc-Triumph
原创作品
转载请标注原创文章地址:https://blog.csdn.net/weixin_42999453/article/details/115711676


分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进