C语言字符串匹配算法:查找子串位置
C语言字符串匹配算法:查找子串位置
本文介绍一个简单的C语言程序,实现了一个名为'findC'的函数,用于查找一个字符串在另一个字符串中的位置。
代码实现
#include <stdio.h>
#include <string.h>
char *findC(const char *source, const char *obj) // 定义函数findC,用于查找字符串obj在字符串source中的位置
{
int Length_source = strlen(source); // 获取source的长度
int Length_obj = strlen(obj); // 获取obj的长度
if (strncmp(source, obj, Length_obj) == 0) // 使用strncmp比较source和obj的前Length_obj个字符
return (char *)source; // 如果相同,则返回source的地址到匹配位置
if (Length_source < Length_obj) // 如果source的长度小于obj,则不存在匹配项
return NULL; // 返回一个空指针
return findC(source + 1, obj); // 将source指针向后移动一个字符,尝试在下一个位置进行匹配
}
int main()
{
const char *source = 'ABCDEF'; // 定义源字符串
const char *source1 = 'ABCAFC'; // 定义另一个源字符串
const char *obj1 = 'C'; // 定义要搜索的目标字符串
const char *obj2 = 'Z'; // 定义其他要搜索的目标字符串
const char *obj3 = 'CD';
const char *obj4 = 'CF';
const char *obj5 = 'A';
char *result1 = findC(source, obj1); // 在source中查找obj1
if (result1)
printf('result1: %c\n', *result1); // 如果找到匹配项,则打印匹配结果
else
printf('result1: NULL\n'); // 如果未找到匹配项,则打印NULL
char *result2 = findC(source, obj2); // 在source中查找obj2
if (result2)
printf('result2: %c\n', *result2); // 如果找到匹配项,则打印匹配结果
else
printf('result2: NULL\n');
char *result3 = findC(source, obj3); // 在source中查找obj3
if (result3)
printf('result3: %c\n', *result3);
else
printf('result3: NULL\n');
char *result4 = findC(source, obj4); // 在source中查找obj4
if (result4)
printf('result4: %c\n', *result4);
else
printf('result4: NULL\n');
char *result5 = findC(source1, obj5); // 在source2中查找obj5
if (result5)
printf('result5: %c\n', *result5);
else
printf('result5: NULL\n');
return 0;
}
代码说明
findC函数使用递归的方式在源字符串source中查找目标字符串obj的位置。- 首先,函数获取
source和obj的长度。 - 然后,使用
strncmp函数比较source和obj的前Length_obj个字符。 - 如果相同,则说明找到了匹配项,返回
source的地址。 - 如果
source的长度小于obj的长度,则说明不存在匹配项,返回NULL。 - 否则,将
source指针向后移动一个字符,递归调用findC函数,继续查找。
测试用例
在 main 函数中,我们定义了两个源字符串 source 和 source1,以及五个目标字符串 obj1 到 obj5。
然后,我们调用 findC 函数在源字符串中查找目标字符串,并将结果打印到控制台。
总结
本文介绍了一个简单的C语言字符串匹配算法,并提供了详细的代码示例和测试用例。该算法简单易懂,适合初学者学习和使用。
原文地址: https://www.cveoy.top/t/topic/NAJ 著作权归作者所有。请勿转载和采集!