浙江工商大学信息学院
开放实验报告
课程: 深入程序设计实践 地点: 信息楼机房 日期: 2014.12.22 学号: 姓名: 班级: 1. 题目描述:
题目描述
输入两个字符行,从中找出在两个字符行中都出现的最长的英文单词。约定英文单词全由英文字母组成,其它字符被视作单词之间的分隔符。
输入
有多组数据,每组输入两个字符行。
输出
输出最长公共英文单词。若不存在,则输出”No common word!”。
样例输入
Hi, Steve Jobs. How are you?
Fine. There are lots of original ideas about new iphone in my mind.
样例输出
are
输入字符串用函数gets()。
2. 问题分析: 参见代码
3. 解题思路和步骤: 参见代码
4. 实现代码: #include #include int main () { char//定义两个字符串数组
int ln_a,ln_b,s=0,count1=0,count2=0,i,j,max=0;
gets(a); //输入这两个字符串 gets(b); ln_a=strlen(a);
ln_b=strlen(b); //
a[100],b[100],*p1,*p2,*p3,*p4,*temp;
计算这两个字符串的长度 p1=a; p3=b;
for(i=0;iif ((a[i]>='A'&&a[i]<='Z')||(a[i]>='a'&&a[i]<='z')) {p1=p1+i; //用指针p1记下字符串a中单词的首字母的地址 while
((a[i]>='A'&&a[i]<='Z')||(a[i]>='a'&&a[i]<='z'))
//这个while循环用来找出单词,当字符不是字母时循环结束。 {
i++; //i++用来看下一个字符是否为字母
count1++; //记下测试了几个字符 }
p2=p1+count1-1; //用指针p2记下单词最后一个字母的地址,。 for (j=0;jif ((b[j]>='A'&&b[j]<='Z')||(b[j]>='a'&&b[j]<='z')){
p3=p3+j; //用指针p3记下字符串b中单词的首字母的地址
while ((b[j]>='A'&&b[j]<='Z')||(b[j]>='a'&&b[j]<='z')) // 这个while循环用来找出单词,当字符不是字母时循环结束。 { j++; count2++; }
p4=p3+count2-1; //用指针p4记下单词最后一个字母的地址,。 if
//如果a中单词与b中单词长度相等,循环继续。 { for //进行两个单词的字母比对。 { if //每当有一个单词相同,s就++ s++; } if
(count1==count2)
(p1,p3;p1<=p2;p1++,p3++)
(*p1==*p3)
(s==count1&&s>max)
//如果s==count1,就意味着两个单词完全相等, {
//max是相同单词长度,如果s>max就进行替换
temp=p1; //同时记下单词首字母地址,以便输出。 }
j=ln_b+1; //一旦找到单词,就不必在b字符串中继续找下一个单词了。 } } }
s=j=count1=count2=0; //开始在a中找下一个单词,S,j,count1,count2都要归零。 /*for (p1;p1<=p2;p1++) printf (\"%c\ printf (\"\\n\"); count1=0;*/ } }
printf (\"%d\\n\ if (max>0) {
max=s;
for (i=0,temp;iif (max==0)printf (\"No common word!\\n\");
return 0; }
5. 运行结果:
Hi, Steve Jobs. How are you?
Fine. There are lots of original ideas about new iphone in my mind. are 6. 小结:
以上为实验报告的格式要求!
作业上交要求:
命名:班级(如:计科1401)+学号(全)+姓名.doc
联系方式:
****************.edu.cn 656010