作者:小成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