高分求字符串比较的算法

wdtclv 2005-11-11 03:06:02
已知 字符串1 = “12345678”
字符串2 = “122346588”
要求:
1、将两个字符串的不同比较出来(假设字符串1是正确的)
2、将字符串2中错误的地方标识出来
...全文
607 57 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
57 条回复
切换为时间正序
请发表友善的回复…
发表回复
fanshow 2005-11-18
  • 打赏
  • 举报
回复
string strFir = "2345678";
string strSec = "223456778";
if (strFir == strSec)
{
System.Console.WriteLine("二者相等{0}:",strFir);
}
else
{

for (int s = 0; s < strSec.Length; ++s)
{
if (strFir.IndexOf(strSec[s]) == -1)
{//不包含
System.Console.WriteLine("不包含!!!!");
}

else if (strFir.IndexOf(strSec[s]) != strFir.LastIndexOf(strSec[s]))
{ //包含超过1次
System.Console.WriteLine("包含超过1次!!");
}


}
for (int s = 0; s < strSec.Length-1; ++s)
{
if (strFir.IndexOf(strSec[s]) == strFir.LastIndexOf(strSec[s + 1]))
{
System.Console.WriteLine("重复!!!");
}
}
}
hainang1234 2005-11-17
  • 打赏
  • 举报
回复
static void Main()
{
string str1 = "123456789";
string str2 = "qq12345abc6789";
ArrayList list = com2(str1,str2);
foreach (object obj in list)
{
object[] arrayObj = (object[])obj;
strall += arrayObj[0].ToString()+"开始的"+arrayObj[1].ToString()+"位"+arrayObj[2].ToString()+"\r\n";
}
MessageBox.Show(strall);
}

static private ArrayList com2(string strold,string str2)
{
ArrayList putoutList = new ArrayList();
for (int j=0; j<str2.Length; j++)
{
for (int i=str2.Length-j; i>0; i--)
{
int re = strold.IndexOf(str2.Substring(j,i));
if (re != -1)
{
putoutList.Add(new object[]{j+1,i,"相等"});
j = j+i-1;
goto continueout;
}
}
//不相等
putoutList.Add(new object[]{j+1,1,"不相等"});

continueout:
continue;
}

return putoutList;
}
sonymusic 2005-11-17
  • 打赏
  • 举报
回复
to:wdtclv

a="ABCDEFG"
b="AAAAACDFG"
D=0,0,0,0,0,2,3,4,5

其实像这样的例子正好可以说明,这种情况第一位是否算错,你完全可以自己设定一个标准。因为这样的字串比对其实是模糊的判断了。好比就算人来判断,你也可以说错了,也可以说对了。因为字符个体是独立的,不联系上下文是无法判断的。当然第一个也比较特殊,完全可以根据位置来决定是否正确,如果这样判断的话,第一位是正确的,那后面的使用d(i+1)=d(i)+1来判断就都符合要求了。
wdtclv 2005-11-17
  • 打赏
  • 举报
回复
UE 是可以,我只是想要自己做啊
xu770 2005-11-17
  • 打赏
  • 举报
回复
Ultra Compare
wdtclv 2005-11-17
  • 打赏
  • 举报
回复
to :sonymusic 老兄
如果按照:
最后的这个数组如果d(i+1)=d(i)+1那么都算是正确的部分。剩余的部分都是出错的地方。
那像
a="ABCDEFG"
b="AAAAACDFG"
D=0,0,0,0,0,2,3,4,5
这种情况第一位就会标示错了
hainang1234 2005-11-17
  • 打赏
  • 举报
回复
没试试我的?
wdtclv 2005-11-17
  • 打赏
  • 举报
回复
to: sonymusic老兄
同样字符串的最后一位也不能比较
感谢你给的算法
看来也只能比较模糊的进行比较了
sonymusic 2005-11-16
  • 打赏
  • 举报
回复
修正一下上面的结果:
a="ABCDEFG"
b="AAAAACDFG"
D=0,0,0,0,0,2,3,4,5

之前对重复字符没有专门处理,判断的时候需要增加这部分的判断。
Liu_Qiang 2005-11-16
  • 打赏
  • 举报
回复
string str1 = "abcdefg";
string str2 = "abcdegf";

ArrayList al = new ArrayList();
if(str1.Length == str2.Length)
{
for(int i=0;i<str1.Length;i++)
{
if(str1[i] == str2[i])
{
al.Add(str1[i].ToString());
}
}
}
输出al的结果为:abcde
熊猫王子 2005-11-16
  • 打赏
  • 举报
回复
l=str1.length;
m=str2.length;
if(l<m)
{
从str2中抽取l个字符与str1进行比较;(遍历)
}
再递归
wdtclv 2005-11-16
  • 打赏
  • 举报
回复
哪怕是给个思路也好啊
wdtclv 2005-11-16
  • 打赏
  • 举报
回复
坛子里带星的各位大侠帮着出出吧
wang790809 2005-11-16
  • 打赏
  • 举报
回复
能力有限 关注中
cm8983 2005-11-16
  • 打赏
  • 举报
回复
mark
jianjian51 2005-11-16
  • 打赏
  • 举报
回复
问题出现的情况太多了 我自己多搞不懂 有多少中情况 没有办法帮你 在下无能为力 sorry
jianjian51 2005-11-16
  • 打赏
  • 举报
回复
这样考虑的问题太多了 能力有限关注中
wdtclv 2005-11-16
  • 打赏
  • 举报
回复
楼上的仁兄我的问题很简单,就是一个类似文稿的校对工作,就像报纸杂志的编辑校稿那样,拿原稿和打的稿件比较,只不过是通过程序去实现他,还是期望CSDN的牛人给出出主意啊
sonymusic 2005-11-16
  • 打赏
  • 举报
回复
to: wdtclv(将军)
我就是考虑了位置偏差,结果并不时要求位置对。而是顺序对……

请看这个结果判断:
最后的这个数组如果d(i+1)=d(i)+1那么都算是正确的部分。剩余的部分都是出错的地方。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

eg:
a="ABCDEFG"
b="AAAAACDFG"
D=0,-1,-1,-1,-1,2,3,4,5

a="ABCDEFG"
b="BCDGFA"
D=1,2,3,6,5,-1

a="AABCDAEFG"
b="BCEAEFG"
D=2,3,-1,5,6,7,8


到这样的结果的时候,我想你的目的应该可以达到了.:)
wdtclv 2005-11-16
  • 打赏
  • 举报
回复
to: syf2000119(ff)
怎么用?
加载更多回复(37)

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧