题目:
思路
先把两组字符串中所有英语单词分别提出至两个字符数组,对这两个二维数组进行比较单词,并选出相同单词存入另一数组;在这一数组中找出最长的英文单词。(注意考虑到输入两次空格时的情况,这一数组存入为0)
#include<stdio.h>
#include<string.h>
int main ()
{
char s1[1000],s2[1000]; //要把s1_等数组放进while循环中,否则会导致数组取用域错误在oj上运行错误
while(gets(s1)&&gets(s2))//用gets()多次输入时的使用格式
{
char s1_[100][100]={},s2_[100][100]={};//把数组初始化处理 使得每次输入输出不重
char common[100][100]={},maxstr[100]={};
int flag=0;//设一个bool判断是否有公共单词
int i,j=0,len,k1=0,k2=0,i1=0,k,max=0;
for(i=0;s1[i]!='\0';i++)
{
if((s1[i]>='A'&&s1[i]<='Z')||(s1[i]>='a'&&s1[i]<='z')) //将字符串中的单词分别存入数组
{
s1_[k1][j]=s1[i];
j++;
}
else
{
k1++;
j=0;
}
}
for(i=0,j=0;s2[i]!='\0';i++)
{
if((s2[i]>='A'&&s2[i]<='Z')||(s2[i]>='a'&&s2[i]<='z'))
{
s2_[k2][j]=s2[i];
j++;
}
else
{
k2++;
j=0;
}
}
for(i=0;i<=k1;i++)//比较两个字符串数组中相同的单词并提出
{
for(k=0;k<=k2;k++)
{
if(strcmp(s1_[i],s2_[k])==0)
{
strcpy(common[i1],s1_[i]);
i1++;
}
}
}
for(i=0;i<=i1;i++)//选出最长单词
{
len=strlen(common[i]);
if(len!=0)//必须要设一个bool否则无法判断两次空格的输入
{
flag=1;
}
if(len>max)
{
max=len;//必须把len值赋给max,否则存在后面的短单词会将maxstr覆盖
strcpy(maxstr,common[i]);//strcpy能更好的将字符串数组赋值给另一个数组 (否则可能报错)
}//数组类型匹配错误,数组名代表一个指针,指向数组首元素地址,这样赋值就等于尝试修改地址,应该用scanf或strcpy
}
if(flag==0)
{
puts("No common word!");
}
else
{
printf("%s\n",maxstr);
}
}
return 0;
}