2.有个程序希望大家帮看看,提提意见,谢谢
分别输入两个字符串,查找最长的部分,以下是代码,刚刚写完,新手,拍砖轻点哦。
希望大家可以给点建议,比如说麻不麻烦,可读性怎么样,算法,或者有什么改进了更好之类的
有时间就请帮看看代码,没时间就帮看看大体就可以了,不管怎么样谢谢了,会尽快结贴的,
我还发了一个类似的帖子,希望大家有时间也看看我另一个,谢谢。
另外,我是用gets语句完成输入,假如用c++的知识应该用什么输入呢,百度上的答案五花八门,主要是能输入空格。
#include<iostream>using namespace std;#include<string>/************下面函数解释: a[],b[]代表两个字符串, m,n代表从第几个开始相同,m代表a[] 开始相同的下标,n代表b[]开始相同的下标, j代表b[]字符串的字节数 因为是以a[]字符串为基准,b[]来寻找,所以b找完一遍就继续从头找, 此时用j字节数来限制************/int digui(char a[],char b[],int m,int n,int i,int j){ int k=0; //记录下有多少个相同的//用goto语句不断循环,循环几次就有几个相同字符,flag: m++; //a下标,第一个字符相同就看下一个 n++; //b下标,用途同上 if(m<=i&&n<=j) //防止越界 { k++; if(a[m]==b[n]) goto flag; } return k; //返回有多少个相同部分};/********输出函数解释:temp代表有多少个相同的,h代表从第几个开始相同*********/void output(char a[],char b[],int temp,int h){ int i; if(temp==0) cout <<"无公共部分"<<endl; else { cout<<"最长公共部分为:"; for(i=h;i<temp+h;i++) cout <<b[i]; cout <<endl; };}int main(){ int i,j; //记录两个字符串的字节数 int m,n; //循环变量 int k=0; //记录变量 int temp=0; //公共部分的个数 int h=0; //公共部分开始的位置 char a[30],b[30]; //两个字符串//字符串的输入 cout <<"第一个字符串:"; gets(a); //gets好像是c语言里的知识,假如用c++呢? cout <<"第二个字符串:"; gets(b);//记录下字节数 i=strlen(a); j=strlen(b);/*下面的两个if语句,用于比如a[]字符串为基准a[0]开始的有连续k个相同部分,a[1]开始有连续k1个相同部分,比较,取长的,用temp和h记录下相同个数和开始相同的位置*/ for(m=0;m<i;m++) { for(n=0;n<j;n++) { if(a[m]==b[n]) k=digui(a,b,m,n,i,j); if(k>temp) temp=k,h=n; k=0; }; } output(a,b,temp,h); return 0; }