Hiển thị kết quả từ 1 đến 2 / 2
  1. #1
    Tham gia
    04-09-2007
    Bài viết
    18
    Like
    0
    Thanked 0 Times in 0 Posts

    Hạnh phúc chuỗi con lớn nhất, các bác kt giúp.

    nó chạy vô cùng tầm bậy, mình thử dò lỗi thì có lẽ ở hàm strncpy??? Bác nào giúp mình kiểm tra với
    #include <stdio.h>
    #include <conio.h>
    #include <string.h>

    char * nhap(char * &s){
    printf("nhap chuoi: ");
    gets(s);
    return s;
    }

    void main(){
    clrscr();
    printf("xet chuoi con lon I of s1 va s2,leng s1>leng s2");
    char *s1,*s2,*s3,*s4,*s5;
    nhap(s1);
    nhap(s2);
    s4="";
    for(int i=0;i<strlen(s2)-1;i++)
    {
    strcpy(s3,s2+i);
    int j=strlen(s3);
    while (j>0)
    { strncpy(s4,s3,j);
    j--;
    if (strstr(s1,s4)!=NULL)
    if (strlen(s5)<strlen(s4))
    s5=s4;
    }
    }
    printf("chuoi con lon nhat la %s",s5);
    getch();
    }
    Quote Quote

  2. #2
    Tham gia
    07-06-2006
    Bài viết
    3,587
    Like
    86
    Thanked 641 Times in 314 Posts
    Bạn viết sai khá nhiều, và nếu 1 OS khó chịu nó sẽ chết ngay trước khi chạy được.

    Lý do: các s1 s2 s3 s4 của bạn không có bộ nhớ cấp phát. Lưu ý nếu viết trong C, kiểu * chỉ là pointer. Nó không phải là string, C không có kiểu string.

    Tôi giải thích sơ sơ ở dưới nhé. Lưu ý là tôi không chỉnh sửa giải thuật của bạn. Tôi chỉ chỉ những chỗ bạn hiểu sai về string thôi.

    Nếu được bạn nên đọc lại những phần sau đây: Bộ nhớ trong C.Cách khởi tạo một chuỗi trong C.

    Và xin nhắc lại một lần nữa nếu công bằng mà nói trong C không có kiểu string như các ngôn ngữ khác. Đối với C , string cũng chỉ là một vùng nhớ và ký tự kết thúc của String phải là "0".


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

    // Ham ở dưới đây là sai.
    //char * nhap(char * &s){
    // Phai duoc sua thanh
    char * nhap(char * s){
    printf("nhap chuoi: ");
    gets(s);
    return s;
    }

    void main(){
    clrscr();
    printf("xet chuoi con lon I of s1 va s2,leng s1>leng s2");
    // Luu y tat ca cac s1 2 3 4 5 deu hien tai khong co vung nho phai khoi tao cho no
    // Co the dung malloc neu muon khoi tao dynamic o day toi luoi va dung khoi tao tinh
    //char *s1,*s2,*s3,*s4,*s5;
    char s1[128],s2[128],s3[128],s4[128],s5[128];
    nhap(s1);
    nhap(s2);
    // Viet nhu the nay la khong duoc. Neu ban muon clear mot chuoi, o day la 1 mang ban phai dung ham de xoa toan bo ky tu cho mang do o day toi dung memset
    //s4="";
    memset(s4,0,sizeof(s4));

    for(int i=0;i<strlen(s2)-1;i++)
    {
    strcpy(s3,s2+i);
    int j=strlen(s3);
    while (j>0)
    { strncpy(s4,s3,j);
    j--;
    if (strstr(s1,s4)!=NULL)
    if (strlen(s5)<strlen(s4))
    // Trong C de gan chuoi A sang chuoi B , ban khong duoc quyen dung phep gan "=", ban chi co the dung strcpy de chep data tu string A sang String B
    //s5=s4;
    strcpy(s5,s4);
    }
    }
    printf("chuoi con lon nhat la %s",s5);
    getch();
    }

Bookmarks

Quy định

  • Bạn không thể tạo chủ đề mới
  • Bạn không thể trả lời bài viết
  • Bạn không thể gửi file đính kèm
  • Bạn không thể sửa bài viết của mình
  •