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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© dream静 中级黑马   /  2014-11-3 22:53  /  1441 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

#include <stdio.h>
#include <string.h>
void findMaxstr(char *s1,char *s2);


int main() {
    printf("请输入第一个字符串:");
    char *str1;
    scanf("%s",str1);
    printf("请输入第二个字符串");
    char *str2;
    scanf("%s",str2);
   
    findMaxstr(str1,str2);
   
    return 0;
}

void findMaxstr(char *s1,char *s2){
    int n2 =0;int l=0;
    for(int i = 0;i < strlen(s1);i++)
    {      int n1 =0;
        for(int j = 0;j < strlen(s2);j++){   //遍历整个s2找出与s1相同的那个字符
            if (s2[j] == s1[i]) {
                n1 = 1;                      //找到一个相同的记录为1
                for(int k =1;s2[j+k] == s1[i+k];k++){
                    n1++;                    //找到继续相同的就+1;
                }
               
            }
            j+= n1-1;                        //拿s1[i]与s2从s2[j+n1]开始比较
        }
        if (n1>n2){                          //记录最大子字符串的长度
            n2 = n1;
            l = i;                           //记录下最大子字符串的起始标记;
        }
    }
    //当子串确实存在时。
    if(n2 != 0){
        printf("最大的子字符串是:");
        for (int i = 0; i < n2;i++) {
            printf("%c",s1[i+l]);
        }
    }else{
        printf("不存在子字符串");
    }
}


请问哪里错了啊?

评分

参与人数 1技术分 +1 收起 理由
星河鹭起 + 1

查看全部评分

10 个回复

倒序浏览
你出错至少把报错提示发出来把  这你要别人怎么看
回复 使用道具 举报
不好意思啊!!
我用终端运行的  编译没错误;运行的时候错误是:Segmentation fault: 11
题目大致是找出两个字符串的最大公共子字符串
回复 使用道具 举报
doudou33420 发表于 2014-11-3 23:50
你出错至少把报错提示发出来把  这你要别人怎么看

看上楼的回复谢谢!
回复 使用道具 举报
dream静 发表于 2014-11-4 10:55
看上楼的回复谢谢!

刚看到回复...   你把char *str1  char*str2改成  char *str1[100]   char *str[100]
回复 使用道具 举报
doudou33420 发表于 2014-11-4 15:12
刚看到回复...   你把char *str1  char*str2改成  char *str1[100]   char *str[100]

能问下为什么要这么改吗
回复 使用道具 举报
dream静 发表于 2014-11-4 21:14
能问下为什么要这么改吗

char *a ; 你知道这是一个指针,   指针也可以存储东西.  但是指针在没有分配地址之前是没发给你保存东西的..
   
回复 使用道具 举报
doudou33420 发表于 2014-11-4 23:24
char *a ; 你知道这是一个指针,   指针也可以存储东西.  但是指针在没有分配地址之前是没发给你保存东西 ...

额,这句话我懂!但是我悟性比较低能再说仔细详细点么,为什么弄成char *str[100]就可以啊 ;
是因为后面这个相当于字符串了么,,,还有就是你说的那个char *str是个指针,是可以储存东西,没分配地址的时候里面相当于没有储存东西;但是我一定义 char *str1;不就是划出块内存给指针str1;这时候里面是什么东西都没有,,不过我后面不是用scanf函数来接收输入的东西的地址传到这个指针了么,相当于这个指针保存接收的东西么,为什么是错的啊!!谢谢你耐心解答啊
回复 使用道具 举报
dream静 发表于 2014-11-5 11:13
额,这句话我懂!但是我悟性比较低能再说仔细详细点么,为什么弄成char *str[100]就可以啊 ;
是因为后面 ...

char * str1并没有画出地址. 此时str1的地址是  nil   所以你给这个地址赋值是不可以的
char str[100] 这样定义会立刻开辟空间 里面所有的元素都有默认值,  str也有地址
回复 使用道具 举报
doudou33420 发表于 2014-11-5 13:22
char * str1并没有画出地址. 此时str1的地址是  nil   所以你给这个地址赋值是不可以的
char str[100] 这 ...

很感谢啊!!懂了太谢谢了
回复 使用道具 举报
dream静 发表于 2014-11-5 17:43
很感谢啊!!懂了太谢谢了

哦了 ....  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马