最长公共英文单词

题目:

 思路

先把两组字符串中所有英语单词分别提出至两个字符数组,对这两个二维数组进行比较单词,并选出相同单词存入另一数组;在这一数组中找出最长的英文单词。(注意考虑到输入两次空格时的情况,这一数组存入为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;
}

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是 C 语言的代码实现: ```c #include <stdio.h> #include <string.h> #include <ctype.h> #define MAX_LEN 1000 void getCommonWord(char str1[], char str2[], char ans[]); int main() { char str1[MAX_LEN], str2[MAX_LEN], ans[MAX_LEN]; while (gets(str1) != NULL && gets(str2) != NULL) { getCommonWord(str1, str2, ans); if (strlen(ans) > 0) { printf("%s\n", ans); } else { printf("No common word!\n"); } } return 0; } void getCommonWord(char str1[], char str2[], char ans[]) { int i, j, k, len1, len2, max_len = 0; char word[MAX_LEN], max_word[MAX_LEN]; len1 = strlen(str1); len2 = strlen(str2); for (i = 0; i < len1; i++) { if (!isalpha(str1[i])) { word[0] = '\0'; } else { k = 0; while (isalpha(str1[i])) { word[k++] = str1[i++]; } word[k] = '\0'; i--; } for (j = 0; j < len2; j++) { if (!isalpha(str2[j])) { max_word[0] = '\0'; } else { k = 0; while (isalpha(str2[j])) { max_word[k++] = str2[j++]; } max_word[k] = '\0'; j--; } if (strcmp(word, max_word) == 0 && strlen(word) > max_len) { strcpy(ans, word); max_len = strlen(word); } } } } ``` 代码思路: 1. 定义 `getCommonWord` 函数,用于获取两个字符串中的最公共单词。 2. 定义 `main` 函数,用于循环读入多组数据,每组数据通过调用 `getCommonWord` 函数获取最公共单词并输出。 3. 在 `getCommonWord` 函数中,使用两层循环分别枚举两个字符串中的单词,通过比较两个单词是否相同,来获取最公共单词。 注意事项: 1. 由于输入的字符串可能包含空格等非英文字母的字符,因此需要在获取单词时忽略这些字符。 2. 在比较两个单词是否相同时,需要使用 `strcmp` 函数来判断。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值