string子串匹配(用string自带函数,不涉及char数组转换)
using namespace std;
#include <iostream>
#include<string> //第1种,用string自带的s.subdtr()截取任意子串,再用s.compare()确定是否与待求子串相等,时间复杂度O(len1*len2)
int index1(string s,string t) {
int i = 1;
int len1 = s.length(); //主串长度
int len2 = t.length(); //子串长度
string sub; //用来放每次找到的临时子串
while (i <= len1 - len2 + 1) { //最大位置,再往后就凑不齐子串长度了
sub=s.substr(i, len2); //找从i开始长度一样的子串
if (sub.compare(t) == 0) {//比较是否一样
cout << "index1找到子串为:" << s.substr(i, t.length()) << endl;
return i; //一样则找到了,不再循环
}
else
i++; //不一样则继续往后找
} //while结束 找到头了证明没有
return 0;
} //第2种,用i和j同步遍历主串和子串,一旦有不一样的字符,重头来过,i起始位置往后移一位,j还原,时间复杂度O(len1*len2)
int index2(string s, string t) {
int i = 0, j = 0; //初始下标为0
while (i < s.length() && j < t.length()) { //循环条件当然是分别不超过长度
if (s[i] == t[j]) { //如果字符相同,则同步往后一个继续比对
i++;
j++;
}
else { //如果不同,不用往后比对了,开始i往后一位重新比对
i = i - j + 1; //i退回到这次比对开始的位置i-j,然后往后一位
j = 0; //j退回到0
}
} //while结束,要么i找完了,要么j找完了
if (j >= t.length()) { //要么j找完i没找完,要么i和j都找完了
cout <<"index2找到子串为:" << s.substr(i - j, t.length()) << endl;
return i - t.length(); //这次比对开始的位置i-j或写i-t.length()
}
else //要么i找完但是j没找完
return 0;
} void main() {
string sf = "ababcabcacbab";
string sz = "abcac";
cout <<"index1 i下标:"<< index1(sf, sz) << endl;
cout << "index2 i下标:" << index2(sf, sz) << endl;
}
string子串匹配(用string自带函数,不涉及char数组转换)的更多相关文章
- delphi char数组、string和Pchar的相互转换
因为要调用windows的api或者给vc++写接口,很多地方都要用到pchar,现在将char数组.string和pchar之间的相互转换都列出来,都是网上找的资料,我总结一下,先直接上代码,再讲原 ...
- String String s = new String("asd") 涉及对象数目
问题·:.String str = new String("abc")创建了多少个对象? 这个问题在很多书籍上都有说到比如<Java程序员面试宝典>,包括很多国内大公司 ...
- [转] 请别再拿“String s = new String("xyz");创建了多少个String实例”来面试了吧
这帖是用来回复高级语言虚拟机圈子里的一个问题,一道Java笔试题的. 本来因为见得太多已经吐槽无力,但这次实在忍不住了就又爆发了一把.写得太长干脆单独开了一帖. 顺带广告:对JVM感兴趣的同学们同志们 ...
- Java JVM 请别拿“String s=new String("z");创建了多少实例”来面试 [ 转载 ]
Java 请别再拿“String s = new String("xyz");创建了多少个String实例”来面试了吧 [ 转载 ] @author RednaxelaFX 原文链 ...
- 转换String三种方式比较:toString()、String.valueOf()、(String)
简单介绍: 1.toString,需要保证调用这个方法的类.方法.变量不为null,否则会报空指针. 2.String.valueOf.这个方法在使用的时候是有些特殊的.一般情况下,如果是确定类型的n ...
- 请别再拿“String s = new String("xyz");创建了多少个String实例”来面试了吧---转
http://www.iteye.com/topic/774673 羞愧呀,不知道多少人干过,我也干过,面壁去! 这帖是用来回复高级语言虚拟机圈子里的一个问题,一道Java笔试题的. 本来因为见得太多 ...
- C# 字符串拼接性能探索 c#中+、string.Concat、string.Format、StringBuilder.Append四种方式进行字符串拼接时的性能
本文通过ANTS Memory Profiler工具探索c#中+.string.Concat.string.Format.StringBuilder.Append四种方式进行字符串拼接时的性能. 本文 ...
- String类,string类的特点
1,String类是final修饰的,不能被继承 2,String类的底层使用数组存储 JDK1.9之前:char[]value JDK1.9之后:byte[]value 3,String类的对象不可 ...
- 用java String类的getBytes(String charsetName)和String(byte[] bytes, String charsetName)解决乱码问题
Java中String的数据是如何存储的,查看源代码就可以知道,String的数据是存储在char[] value这样一个成员变量中的,char类型的大小在java中是2个字节 我们还知道,现在普遍使 ...
随机推荐
- 关于使用JS去除URL中的指定参数问题,js 对url进行某个参数的删除,并返回url
在网页上找了半天,发现现在的资源实在是少的可怜,而前端尤甚.所以没办法,于是自己花了一些时间写了一个: 1 /** 2 * 删除URL中的指定参数 3 * @param {*} url 4 * @pa ...
- IDEA HTTP Client(史上最全)
文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...
- Mysql慢SQL分析及优化
为何对慢SQL进行治理 从数据库角度看:每个SQL执行都需要消耗一定I/O资源,SQL执行的快慢,决定资源被占用时间的长短.假设总资源是100,有一条慢SQL占用了30的资源共计1分钟.那么在这1分钟 ...
- SCP,SSH应用
- 图解 Redis | 不多说了,这就是 RDB 快照
大家好,我是小林. 虽说 Redis 是内存数据库. 但是它为数据的持久化提供了两个技术,分别是「 AOF 日志和 RDB 快照」. 这两种技术都会用各用一个日志文件来记录信息,但是记录的内容是不同的 ...
- Java并发之ReentrantLock源码解析(二)
在了解如何加锁时候,我们再来了解如何解锁.可重入互斥锁ReentrantLock的解锁方法unlock()并不区分是公平锁还是非公平锁,Sync类并没有实现release(int arg)方法,这里会 ...
- 使用pdb进行Python调试
调试应用有时是一个不受欢迎的工作,当你长期编码之后,只希望写的代码顺利运行.但是,很多情况下,我们需要学习一个新的语言功能或者实验检测新的方法,从而去理解其中运行的机制原理. 即使不考虑这样的场景,调 ...
- 整合Spring Cloud Stream Binder与GCP Pubsub进行消息发送与接收
我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 前言 之前的文章<整合Spring Cloud Stream Binder与RabbitMQ进行消息发送与接收& ...
- Java数据库开发(二)之——DBCP连接数据库
1.载入jar包 DBCP需要以下几个jar包,可到apache及mysql的官网下载 2.程序编写 public static BasicDataSource ds = null; static f ...
- Linux指令手册 (一)
指令格式 指令主体 [选项] [操作对象] 一个完整的指令是由"指令主体"."选项"和"操作对象"组成的,其中指令主体只能有一个,选项有零个 ...