浙江工商大学信息学院
开放实验报告
课程: 深入程序设计实践 地点: 信息楼机房 日期: 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 //定义两个字符串数组 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;i 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;j { 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;i 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 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- dfix.cn 版权所有 湘ICP备2024080961号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务