asp.net下比较两个等长字符串是否含有完全相同字符(忽略字符顺序)

例如:“北京欢迎你”和“欢迎你北京”,于是有了下列的测试,但是发现效率应该还有提升的空间,不知道有没有其他更好的办法。
刚开始是这样想的,判断两个字符串中的字符是否含有完全相同的字符需要两个条件
1,两个字符串长度相同
2,两个字符串中的每个字符都在对方的串中
比如前面说的:“北京欢迎你”和“欢迎你北京”,于是有了下面的一段代码:


代码如下:

private static bool CompareStringByChar(string strA,string strB)
{
bool IsEqual = true;
char[] arrA = strA.ToCharArray();
char[] arrB = strB.ToCharArray();
foreach (char chara in arrA)
{
if (!strB.Contains(chara))
{
IsEqual = false;
}
}
foreach (char charb in arrB)
{
if (!strA.Contains(charb))
{
IsEqual = false;
}
}
return IsEqual;
}

测试通过,但是当两个字符串中有重复的字符呢,如:“4455”和“4555”,那么上面的程序就无能为力了,只能判断两个字符串都含有4和5,但是却无法判断两个字符的数量是否一样,无法满足要求,所以处理两个字符串的需求又变成这样:
1,两字符串中任意一个字符都在对方的串中
2,两字符串中任意一个字符的数量与对方串中相同字符的数量相等
3,两个字符串长度相等(由于2,可取消。)
改造后的程序如下:
比较两个字符串是否含有完全相同的字符


代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace StringCompare
{
class Program
{
static void Main(string[] args)
{
string a = "4555";
string b = "5544";
Console.WriteLine(CompareStringByChar(a,b));
Console.Read();
}
//比较两个字符串是否含有完全相同的字符
private static bool CompareStringByChar(string strA,string strB)
{
bool IsEqual = true;
char[] arrA = strA.ToCharArray();
char[] arrB = strB.ToCharArray();
foreach (char chara in arrA)
{
if (!strB.Contains(chara))
{
IsEqual = false;
}
else
{
if(GetSameCharCount(chara,arrA)!=GetSameCharCount(chara,arrB))
{
IsEqual = false;
}
}
}
foreach (char charb in arrB)
{
if (!strA.Contains(charb))
{
IsEqual = false;
}
else
{
if (GetSameCharCount(charb, arrA) != GetSameCharCount(charb, arrB))
{
IsEqual = false;
}
}
}
return IsEqual;
}
   //获得某字符在字符串中的数量
private static int GetSameCharCount(char chara,char[] arrChar)
{
int count = 0;
foreach(char a in arrChar)
{
if(chara==a)
{
count++;
}
}
return count;
}
}
}

感觉还有更好的办法,抛砖引玉,希望朋友们不吝赐教。
上面的比较两个等长字符串是否含有完全相同字符(忽略字符顺序)有朋友说了更为简单的办法,中午实现了一下。多谢 Paradox。
需求是比较两个字符串中含有的字符是否完全相同,即“我和你”与“你和我”是含有相同字符的。
这个实现的基本逻辑是这样的,将两个字符串分别放到List中,做简单的循环判断,如果A集合中的字符在B中出现,则同步删除A与B中的这个字符。
至于有朋友说采用最大公共字符串的方法,LCS和LD算法的话,在矩阵中找的话个人以为不比这个省多少时间,有空了试试。


代码如下:

[code]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
namespace StringCompare
{
class Program
{
static void Main(string[] args)
{
string strA = "中华人民共和国";
string strB = "共和国人民中华";
List<char> listA = strA.ToList();
List<char> listB = strB.ToList();
for (int i = 0; i < listA.Count;i++ )
{
for (int j = 0; j < listB.Count;j++ )
{
if (listA[i].ToString() == listB[j].ToString())
{
listA.RemoveAt(i);
listB.RemoveAt(j);
i--;
j--;
break;
}
}
}
if (listA.Count == 0 && listB.Count == 0)
{
Console.WriteLine("相等");
}
else
{
Console.WriteLine("不相等");
}
Console.Read();
}
}
}

[/code]
作者:LeonWeng
出处:http://cnblogs.com/wengyuli

(0)

相关推荐

  • ASP.NET中操作SQL数据库(连接字符串的配置及获取)

    在WebConfig中配置数据库连接字符串,代码如下: 复制代码 代码如下: <connectionStrings> <add name="ConnectionString" connectionString="user id=用户名;password=密码;initial catalog=数据库名称;data source=服务器名称"/> </connectionStrings> 然后在Webform_1.aspx.cs里面获

  • ASP.NET从字符串中查找字符出现次数的具体实现方法

    首先想到的方法当然是从头遍历字符串并统计: 复制代码 代码如下: c1=0;for(inti=0;i {if(str[i]=='A'){c1++;}} 第二种方法也很容易想到,将字符串中所有要查找的字符去除,然后比较去除前后的字符串长度即可.这种方法遭到了某人的鄙视,据说性能很差而且多占空间. 复制代码 代码如下: c2=str.Length-str.Replace("A",String.Empty).Length; 接下来某人又提出了第三种方法,是用要查找的字符为分隔符,将原字符串分

  • Asp.net,C# 加密解密字符串的使用详解

    首先在web.config | app.config 文件下增加如下代码: 复制代码 代码如下: <?xml version="1.0"?>  <configuration>    <appSettings>      <add key="IV" value="SuFjcEmp/TE="/>      <add key="Key" value="KIPSToILG

  • asp.net 计算字符串中各个字符串出现的次数

    实现第一步,需要把字符串分割为一个array,需要使用到的函数Split(): 复制代码 代码如下: string[] arr = s.Split (','); 第二步,用Dictionary(TKey,TValue)实例化. 复制代码 代码如下: Dictionary<string, int> Statistics = new Dictionary<string, int>(); 第三步,统计: 复制代码 代码如下: foreach (string w in arr) { if

  • ASP.NET两个截取字符串的方法分享

    复制代码 代码如下: 两个截取字符串的实用方法(超过一定长度自动换行)/// /// 截取字符串,不限制字符串长度 /// /// 待截取的字符串 /// 每行的长度,多于这个长度自动换行 /// public string CutStr(string str,int len) { string s=""; for(int i=0;i 11 { int r= i% len; int last =(str.Length/len)*len; if (i!=0 && i<

  • 解析Asp.net,C# 纯数字加密解密字符串的应用

    继上篇:Asp.net,C# 加密解密字符串的使用详解,有网友提问: 也就是说加密后的数据不再是:N8lAaHMFtSAQgaf3+RUFng== 希望encryptedString是"120387789370480938409832840923492384028934-"; 当然上面的数字是我随便乱敲的. 那么如何实现纯数字呢?? 想法很简单,只要将字符变成Ascll 码就可以了.例如a:97, =:61; 那么encryptedString 就可以变成 97 81 61 33 44

  • ASP.NET JSON字符串与实体类的互转换示例代码

    还是先封装一个类吧! 这个类网上都可以找到的!有个这个类,一切都将变得简单了,哈哈. 复制代码 代码如下: using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Runtime.Serialization.Json;using System.ServiceModel.Web;///记得引用这个命名空间using System.IO;using System.Tex

  • ASP.NET web.config中数据库连接字符串connectionStrings节的配置方法

    在ASP.NET开发的网站根目录,有一个名为web.config的文件,顾名思义,这是为整个网站进行配置的文件,其格式为XML格式.这里主要谈谈文件中的<connectionStrings>节. <connectionStrings>节是对连接到数据库的字符串进行配置,由于MS SQL Server与ASP.NET同属于微软的产品,因此是使用ASP.NET开发时首选的数据库是MS SQL Server,本文只讨论对MS SQL Server的连接字符串情况.第一种情况,本地开发时,

  • asp.net字符串分割函数使用方法分享

    先来看个简单的实例 但是其数组长度却是25,而不是3.下面这种方法是先将"[jb51.net]"替换成一个特殊字符,比如$,在根据这个字符执行Split 例如下面根据[jb51.net]分割 复制代码 代码如下: string[] arrstr2 = str.Replace("[jb51.net]", "$").Split('$'); 好了看其它方法.最简单最常用的方法,以一个指定的字符进行的分割 打开vs.net新建一个控制台项目.然后在Mai

  • asp.net richTextBox中高亮显示选中字符串或文本

    实例验证如下: 复制代码 代码如下: private void 突出显示(string 要查找字符串) { //首先找到要查找字符串的起始位置 int 开始位置=richTextBox短语显示.Find(要查找字符串); //判断一下是否找到,如果找不到那么开始位置是-1 if (开始位置>=0) { richTextBox短语显示.SelectionStart = 开始位置; //得到字符串的长度 richTextBox短语显示.SelectionLength = 要查找字符串.Length;

  • asp.net 常用字符串处理方法

    string fox; fox.ToLower()转化成小写字母 fox.ToUpper()转化成大写字母 fox.Trim()删除前后空格 fox.Trim(trimChars)删除其它字符 fox.TrimStart()删除前空格 fox.TrimEnd()删除后空格 fox.PadLeft(10)增加左边空格,使字串达到某长度. fox.PadRight(10)增加右边空格,使字串达到某长度. fox.PadX(10,'-')增加其它字符,使字串达到某长度.X指:Left/Right fo

  • asp.net中将某字符串切割成阵列并排序列出

    复制代码 代码如下: protected void Page_Load(object sender, EventArgs e) { string s = "a;b;d;z;y;u"; string[] sa = s.Split(';'); Array.Sort(sa); //排序 for (int i = 0; i < sa.Length; i++) { Response.Write(sa[i].ToString() + "<br />"); }

  • asp.net字符串处理类代码

    复制代码 代码如下: using System; using System.Collections; using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; using System.Security.Cryptography; using System.IO; using System.Text; namespace StringClass { public class

  • asp.net分割字符串的几种方法小结

    下面一一介绍一下: 1.最简单最常用的方法,以一个指定的字符进行的分割 打开vs.net新建一个控制台项目.然后在Main()方法下输入下面的程序. 复制代码 代码如下: string s="abcdeabcdeabcde"; string[] sArray=s.Split('c'); foreach(string i in sArray) Console.WriteLine(i.ToString()); 输出下面的结果: ab deab deab de 2.使用多个字符进行分割 复制

  • asp.net判断字符串是否是中文的方法

    任何字符在unicode编码中都占用两个字节.而在一般编码方式中英文字符可以用一个字节表示,中文要用两个.这样英文字符在unicode编码中多占用了一个没有用的字节,这个没用字节就用0代替.如果unicode编码中字符的第一个字节是0那他就是英文字符.不是0他就可能是除了英文字符之外的很多种语言的文字,不仅仅是中文. 复制代码 代码如下: View Code public bool CheckChinese(string str)        {            bool flag =

  • asp.net(c#) 使用Rex正则来生成字符串数组的代码

    看这儿.如果你熟悉正则表达式 ,让我们进入正题.这个TOOL的名称叫Regular Expression Exploration. 你可以从这儿下载 .目前的版本是1.0 release. Rex是一个命令行工具, 具体用法可以在CMD下执行便可以看到用法,这个是.net的程序.我们可以引用它,然后用下面的Code来生成我们想要的字符串数组. 复制代码 代码如下: /// <summary> /// Generates the test. /// </summary> /// &l

  • asp.net中利用正则表达式判断一个字符串是否为数字的代码

    复制代码 代码如下: publicstaticbool IsNumeric(string value) { return Regex.IsMatch(value, @"^[+-]?\d*[.]?\d*$"); } publicstaticbool IsInt(string value) { return Regex.IsMatch(value, @"^[+-]?\d*$"); } publicstaticbool IsUnsign(string value) { r

  • asp.net中url字符串编码乱码的原因与解决方法

    先看实例 复制代码 代码如下: function webChart() {            var t = document.getElementById("txtReceive");            if (t.value == null || t.value == "") {                alert("请先进行查询");            }            else { alert(t.value);

随机推荐