浙江工商大学信息学院
开放实验报告
课程:深入程序设计实践地点:信息楼机房日期: 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.
样例输出
c语言指针实验总结are
输入字符串用函数gets()。
2. 问题分析:
参见代码
3. 解题思路和步骤:
参见代码
4. 实现代码:
#include <stdio.h>
#include <string.h>
int main ()
{
char a[100],b[100],*p1,*p2,*p3,*p4,*temp; //定义两个字符串数组
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); //
计算这两个字符串的长度
p1=a;
p3=b;
for(i=0;i<ln_a;i++)
{
if ((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;j<ln_b;j++)
{
if ((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 (count1==count2) //如果a中单词与b中单词长度相等,循环继续。
{
for (p1,p3;p1<=p2;p1++,p3++) //进行两个单词的字母比对。
{
if (*p1==*p3) //每当有一个单词相同,s就++
s++;
}
if (s==count1&&s>max)
//如果s==count1,就意味着两个单词完全相等,
{ max=s; //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",*p1);
printf ("\n");
count1=0;*/
}
}
printf ("%d\n",max);
if (max>0)
{
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论