#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'))
//这个 whi l e 循环用来找出单词, 当字符不是字母时循环结束。
{
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'))
// 这个 whi l e 循环用来找出单词, 当字符不是字母时循环结束。
{
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++)
pri ntf ("%c", *p1) ;
pri ntf ("\n") ;
count1=0; */
}
}
printf("%d\n", max);
if(max > 0)
{
for (i = 0, temp; i < max; i++)
printf("%c", *(temp + i));
printf("\n");
}
if(max == 0)
printf("No common word! \n");
return 0;
}
30、53行为什么要将循环变量加1呢?写的好复杂啊。
题目是啥呢