A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© EchoWill 中级黑马   /  2014-4-28 11:02  /  860 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 EchoWill 于 2014-4-28 19:19 编辑
  1. #include <stdio.h>
  2. #include <string.h>

  3. void maxStr(char *s1 ,char *s2,int num1,int num2);

  4. int main(int argc, const char * argv[])
  5. {
  6.    
  7.    
  8.     // 定义2个字符串
  9.     char str1[1024],str2[1024];

  10.     while (1) {
  11.         
  12.         printf("请输入第一个子串:\n");
  13.         gets(str1);
  14.         int len1 = strlen(str1); // 获取字符串str1的长度
  15.         
  16.         printf("请输入第二个子串:\n");
  17.         gets(str2);
  18.         int len2 = strlen(str2); // 获取字符串str2的长度
  19.         
  20.         maxStr(str1, str2, len1, len2);
  21.         
  22.         getchar();
  23.     }
  24.      
  25.    
  26.     return 0;
  27. }

  28. // 获取最大公共字符串,字符串s1长度num1,字符串s2长度num2
  29. void maxStr(char *s1 ,char *s2,int num1,int num2)
  30. {
  31.     int index = 0;  // 字符相同时,字符串s1的初始下标
  32.     int n1; // 每个公共子串的长度
  33.     int n2 = 0; // 公共子串的初始长度
  34.    
  35.     // 循环遍历2个字符串
  36.     for (int i = 0; i<num1; i++)
  37.     {
  38.         for (int j = 0; j< num2; j++)
  39.         {
  40.             if (s1[i] == s2[j] && s1[i]!='\0')  // 当字符相同时,给定子串长度为1
  41.             {
  42.                 n1 = 1;
  43.                
  44.                 // 循环判断相同字符数
  45.                 for (int k = 1; s1[i+k]==s2[j+k] && s1[i+k]!='\0'; k++)
  46.                 {
  47.                     n1++;
  48.                 }
  49.                
  50.                 // 找到最长子串时,设置下标index
  51.                 if (n1>n2)
  52.                 {
  53.                     index = i;
  54.                     n2 = n1 ;
  55.                 }
  56.                 j+=n1-1;
  57.             }
  58.         }
  59.     }
  60.    
  61.     if (n2!=0)
  62.     {
  63.         printf("最大公共子串:\n");
  64.         for (int i = 0; i<n2; i++) {
  65.             printf("%c",s1[index+i]);
  66.         }
  67.     }
  68.     else
  69.     {
  70.         printf("没有公共子串!\n");
  71.     }
  72. }
复制代码

功能没实现,大家有解决方案吗?

2 个回复

倒序浏览
本帖最后由 胡铭 于 2014-4-28 14:44 编辑

#include <stdio.h>
#include <string.h>

void maxStr(char *s1 ,char *s2,int num1,int num2);

int main(int argc, const char * argv[])
{
   
   
    // 定义2个字符串
    char str1[1024],str2[1024];

    while (1) {
        
        printf("请输入第一个子串:\n");
        gets(str1);
        int len1 = strlen(str1); // 获取字符串str1的长度
        
        printf("请输入第二个子串:\n");
        gets(str2);
        int len2 = strlen(str2); // 获取字符串str2的长度
        
        maxStr(str1, str2, len1, len2);
        
        getchar();
    }
     
   
    return 0;
}

// 获取最大公共字符串,字符串s1长度num1,字符串s2长度num2
void maxStr(char *s1 ,char *s2,int num1,int num2)
{
    int index = 0;  // 字符相同时,字符串s1的初始下标
    int n1; // 每个公共子串的长度
    int n2 = 0; // 公共子串的初始长度
   
    // 循环遍历2个字符串
    for (int i = 0; i<num1; i++)
    {
        for (int j = 0; j< num2; j++)
        {
            if (s1 == s2[j] && s1!='\0')  // 当字符相同时,给定子串长度为1
            {
                n1 = 1;
               
                // 循环判断相同字符数
                for (int k = 1; s1[i+k]==s2[j+k] && s1[i+k]!='\0'; k++)
                {
                    n1++;
                }
               
                // 找到最长子串时,设置下标index
                if (n1>n2)
                {
                    index = i;
                    n2 = n1 ;
                }
                j+=n1-1;
            }
        }
    }
   
    if (n2!=0)
    {
        printf("最大公共子串:\n");
        for (int i = 0; i<n2; i++) {
            printf("%c",s1[index+i]);                //1改成i就好了
        }
    }
    else
    {
        printf("没有公共子串!\n");
    }
}

评分

参与人数 1技术分 +1 收起 理由
脸皮猴 + 1

查看全部评分

回复 使用道具 举报
貌似基础考试的题都一样
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马