C语言之基本算法41—字符串匹配问题

//字符串匹配问题

/*

===============================================================

题目:输入两字符串S,T,输出在S中存在但在T中不存在的字符存储到新的字符串中,

并保持其在字符串S中的顺序,然后在屏幕上显示新的字符串的内容。

===============================================================

*/

#include<stdio.h>

#include<string.h>

void main()

{

char S[30],T[30],xin[30];

int i,j,k=0;

printf("字符串S:");

gets(S);

printf("字符串T:");

gets(T);

for(i=0;i<strlen(S);i++)

for(j=0;j<strlen(T);j++)

if(S[i]==T[j])

S[i]=‘ ‘;

for(i=0;i<strlen(S);i++)

if(S[i]!=‘ ‘)

xin[k++]=S[i];

xin[k]=‘\0‘;

printf("新字符串:");

for(i=0;i<strlen(xin);i++)

printf("%c",xin[i]);

printf("\n");

}

/*

===============================================================

评:相当于求S-T;

实现的基本思想是将S中的第一个字符与T中的所有字符进行匹配,若匹配成功,则

赋‘  ‘,否则不予处理,直到S中所有字符都进行过匹配。然后将S中不为‘ ‘的字符按原

来顺序保存到新字符串中,最后顺序输出即可。

===============================================================

*/

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2025-01-02 18:25:08

C语言之基本算法41—字符串匹配问题的相关文章

KMP算法解决字符串匹配

该算法由D.E.Knuth ,J.H.Morris和 V.R.Pratt提出,用于解决字符串匹配问题. 思想: 设目标串(主串)为s,模式串为t ,并设i指针和j指针分别指示目标串和模式串中正待比较的字符,设i和j的初值均为0.若有s[i]=t[j],则i和j分别加1.否则,i不变,j退回到j=next[j-1]的位置,再比较s[i]和t[j],若相等,则i和j分别加1.否则,i不变,j再次退回到j=next[j]的位置,依此类推.直到下列两种可能: 1. 模式串t中的字符全部匹配,则出现频率+

【算法】字符串匹配之Z算法

在很长一段时间,求文本与单模式串匹配,我只用KMP.后来我在CF上看到Z算法,用的人也不少.在学习之后,我感觉Z算法也是很精妙的.在以前的博文中也有过用Z算法来解决字符串匹配的题目. 下面介绍一下Z算法. 先一句话讲清楚Z算法能求什么东西. 输入为一个字符串s,Z算法可以求出这个字符串每一个后缀与自身的最长公共前缀LCP. 接下来,介绍Z算法的具体内容. 记字符串s的长度为n. Z算法需要维护一对值,记为left和right,简记为L和R.L和R满足s[L,R]为s串的前缀.当i为1的时候,暴力

字符串匹配暴力算法 与 字符串匹配的KMP算法

声明:先看一下阮一峰的网络日志关于字符串的KMP算法的讲解.本文图片均引用于这篇日志. 在先前的笔试中遇到了关于字符串匹配的问题,一时脑袋卡壳没写好算法.现在就来分析分析 暴力算法和KMP算法各自原理,以及代码实现,之间差异,并且总结一下好算法的一般思路. =========================================================================== 各自原理: 暴力算法: 1. 我们把长的字符串做为一个文本字符串,命名为strText,把

数据结构与算法简记--字符串匹配KMP算法

KMP算法 比较难理解,准备有时间专门啃一下. 核心思想与BM算法一样:假设主串是 a,模式串是 b.在模式串与主串匹配的过程中,当遇到不可匹配的字符的时候,我们希望找到一些规律,可以将模式串往后多滑动几位,跳过那些肯定不会匹配的情况. 不同的是:在模式串和主串匹配的过程中,把不能匹配的那个字符仍然叫作坏字符,把已经匹配的那段字符串叫作好前缀. 关键找相等的最长匹配前缀和最长匹配后缀.有两种情况,(1)如果b[i-1]的最长前缀下一个字符与b[i]相等,则next[i]=next[i-1]+1.

Boyer Moore算法(字符串匹配)

上一篇文章,我介绍了KMP算法. 但是,它并不是效率最高的算法,实际采用并不多.各种文本编辑器的"查找"功能(Ctrl+F),大多采用Boyer-Moore算法. Boyer-Moore算法不仅效率高,而且构思巧妙,容易理解.1977年,德克萨斯大学的Robert S. Boyer教授和J Strother Moore教授发明了这种算法. 下面,我根据Moore教授自己的例子来解释这种算法. 1. 假定字符串为"HERE IS A SIMPLE EXAMPLE",搜

KMP算法实现字符串匹配

#include<stdio.h> #include<string> #include<iostream> using namespace std; int main() { string str,p; cin>>str>>p; int n=str.length(); int m=p.length(); //compute prefix function int pre[100]; pre[0]=-1; int k=-1; for(int j=1

【数据结构与算法】字符串匹配KMP算法

首先需要了解一下BF暴力匹配算法,这个算法为每一个串设置一个指针,然后两个指针同时后移,出现不匹配的情况后,主串指针回到开始后移之前的位置的下一位,模式串指针回到最开始. 对比一下KMP算法,同样是设置两个指针,然后两个指针同时后移,出现不匹配的情况后,主串指针不变,模式串指针回溯一定的距离.具体模式串指针回溯多少,是第一次看KMP算法的人比较难以理解的,其实仔细想想,模式串的前缀和后缀其实也是在做匹配,当P[K]!=P[J]时就是失配,那么前缀的指针就需要回溯,所以后k=next[k]. 代码

C语言值基本算法43—总结

C程序的基本算法共涵盖42个例题,包含了枚举.排列.逻辑判断.迭代.递推.字符串操作.矩阵操作.格式输出等内容. 相关的实现方法有的显得很笨拙,但足够说明问题,而且每个程序都经过作者亲测,保证可以运行.之所以称之为基本算法,就是为了测试基础知识的掌握,都是从原始的角度进行处理,没有运用过于花哨的处理技巧,作者也是在学习中进步,也希望这些代码对于没有基础或者基础薄弱的朋友带来帮助. 至此,基本知识就掌握了,我们常常会听说C的强大,因为它是面向过程的,在数学领域具有极好的应用,有必要进行进一步的学习

字符串匹配常见算法(BF,RK,KMP,BM,Sunday)

今日了解了一下字符串匹配的各种方法. 并对sundaysearch算法实现并且单元. 字符串匹配算法,是在实际工程中经常遇到的问题,也是各大公司笔试面试的常考题目.此算法通常输入为原字符串(string)和子串(pattern),要求返回子串在原字符串中首次出现的位置.比如原字符串为"ABCDEFG",子串为"DEF",则算法返回3.常见的算法包括:BF(Brute Force,暴力检索).RK(Robin-Karp,哈希检索).KMP(教科书上最常见算法).BM(