如何判断两个字符串中所有的字符相同,无视
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何判断两个字符串中所有的字符相同,无视相关的知识,希望对你有一定的参考价值。
比较两个字符串是否相等,最常见的方法就是使用“===”来判断,至于它和“==”的区别,简单来说就是前者强调“identical”类型也要求一样;后者要求“equal”,值相同就可以了,参考【1】。或者使用strcmp来判断,但是这个能够告诉你两个字符串是否相等,但是无法告诉你在那里不同。我的思路是单字符串分割为一个个字母(character),这样比较就能精确知道在那个位置不同了。分隔字符串,使用“str_split”就可以了,语法参考【2】。然后输出结果数组,好处是连空格也会作为数组的元素。我之前的例子就是因为前一个字符串包含2个空格,而后一个只有一个。但是输出的时候看到的显示都是一样的。 也可以按照其他分隔符进行分割,如“explode”或者“preg_split”,一般能用 !=, == 比较两个对象是否相等,只所以说是两个对象,是因为他们不一定全部为字符串,也能为整型等等。比如
$a = "joe";
$b = "jerry";
if ($a != $b)
echo "不相等";
else
echo "相等";
如果用 !==,===(能看到多了一个等号)比较的话,两个对象的类型要严格相等才能返回true;否则用==,!=则会将字符串自动转换成相应的类型,以便进行比较.
22 == "22"; // 返回 true
22 === "22"; // 返回false
正因为这样,所以我们的程式时常会发生一些想不到的“意外”:
0 == "我爱你"; // 返回true
1 == "1 我爱你";// 返回true
php教程里更有这样一组用于字符串比较的函数:strcmp,strcasecmp,strncasecmp(), strncmp(),他们都是如果前者比后者大,则返回大于0的整数;如果前者比后者小,则返回小于0的整数;如果两者相等,则返回0.他们比较的原理和其他语言的规则都是相同的。
strcmp是用于区分大小写(即大小写敏感)的字符串比较:
echo strcmp("abcdd", "abcde"); // 返回 1 (>0), 比较的是 "b"和"b"
strcasecmp用于不区分大小写的字符串比较:
echo strcasecmp("abcdd", "abcde"); // 返回 -1 (<0), 比较的是"d"和"e"
strncmp用于比较字符串的一部分,从字符串的开头开始比较,第三个参数,为要比较的长度:
echo strncmp("abcdd", "abcde", 3); // 返回 1 (>0), 比较了 abc 和 abc
strncasecmp用于不区分大小写的比较字符串的一部分,从字符串的开头开始比较,第三个参数,为要比较的长度:
echo strncasecmp("abcdd", "abcde", 3); // 返回 0, 比较了 abc 和 abc, 由于不区分大小写,所以两者是相同的。
更有一种情况是单单比较字符串大小,达不到我们预定的需求,比如照常理 10.gif 会比 5.gif 大,但如果应用上面几个函数,就会返回 -1,即表示 10.gif比5.gif,针对这种情况,php提供了两个自然对比的函数strnatcmp,strnatcasecmp:
echo strnatcmp("10.gif", "5.gif"); // 返回 1 (>0)
echo strnatcasecmp("10.gif", "5.gif"); // 返回 1 (>0)
[译者注:multi-paradigm 中的 paradigm 指形式,常见的编程形式包括:命令式(imperative)、函数式(functional)、申明式(declarative)、面向对象(object-oriented)、过程化(procedural)、逻辑化(logic)、风格化(symbolic)——参考维基百科] 参考技术A strcmp
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
java语言中编程求解两个字符串最长相同字符串的长度
两个字符串中可能有很多相同的子串,在这些子串中肯定存在一个最长的子串,那该如何找到该子串并计算其长度
public class StringTest4/**
* @param args
*/
public static void main(String[] args)
/*
* 需求4:两个字符串的最大相同子串。
* "sadfcctvghjkl"
* "zxcctvcv"
*
* 思路:
* 1,以短的字符串为主。
* 到长的字符串中去判断是否存在,如果存在,已找到。
* 2,如果没有找到。将短的字符串的长度递减获取子串继续到长的串中查找。只要找到就结束。
* 3,没有找到,说明没有相同的。
*
*/
String s1 = "sadfcctvghjkl";
String s2 = "zxcctvcv";
String maxSub = getMaxSubString(s2,s1);
System.out.println("maxsub="+maxSub+" length="+maxSub.length());
public static String getMaxSubString(String s1, String s2)
//确定哪个是长的哪个是短的。
String longStr,shortStr;
longStr = s1.length()>s2.length()?s1:s2;
shortStr = s1.equals(longStr)?s2:s1;
// System.out.println("long:"+longStr);
// System.out.println("short:"+shortStr);
//对短的字符串操作,从短串中取子串,到长字符串中判断,是否存在。
for(int x=0; x<shortStr.length(); x++)
for(int y=0,z=shortStr.length()-x; z<=shortStr.length(); y++,z++)
//根据y,z,获取子串。
String temp = shortStr.substring(y,z);
// System.out.println(temp);
if(longStr.contains(temp))
return temp;
return null;
参考技术A 动态规划算法 网上有很多的 自己百度 看懂动态规划算法你就会了
以上是关于如何判断两个字符串中所有的字符相同,无视的主要内容,如果未能解决你的问题,请参考以下文章