Từ 1 tới 5 trên tổng số 5 kết quả

Đề tài: code chạy không đúng yêu cầu đặt ra

  1. #1
    Ngày gia nhập
    09 2018
    Bài viết
    2

    Mặc định code chạy không đúng yêu cầu đặt ra

    Chào tât cả anh chị e diễn đàn!
    E mới học lập trình c và gặp phải vấn đề thắc mắc nhờ mọi người giúp đỡ
    E muốn viết một chương trình con để truyền vào một chuỗi sau đó xử lý đảo ngược thứ tự các phần tử trong chuỗi
    và trả về chuỗi mới đã được đảo ngược
    thứ tự.
    Ví dụ:
    truy ền vào chuỗi"123456789"
    và yêu cầu hàm trả về chuỗi mới là"987654321"
    Code của e như sau biên dịch k lỗi nhưng
    chạy k đúng yêu cầu

    char *nhan(char *truyen)
    {
    unsigned char i=0 , j=0, *chuoi;
    while(truyen[i]!=0) i++; //su dung bien i de xac dinh so ky tu trong chuoi truyen vao
    while(i>=0)
    {/*o day em lay phan tu co chi so lon nhat
    cua chuoi truyen gan cho phan tu co chi so
    nho nhat cua mang nhan*/
    chuoi[j]=truyen[i-1];
    i--;
    j++;
    }
    return chuoi;
    }

  2. #2
    Ngày gia nhập
    12 2015
    Nơi ở
    Đà Nẵng
    Bài viết
    402

    Khai báo chuổi
    char chuoi[256];
    Thêm vào trước return dòng
    chuoi[j]=0;

    - - - Nội dung đã được cập nhật ngày 20-09-2018 lúc 02:36 PM - - -

    Đổi while(i>=0) thành while(i>=1)

  3. #3
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất đông người
    Bài viết
    514

    Trích dẫn Nguyên bản được gửi bởi thinbumbum Xem bài viết
    Chào tât cả anh chị e diễn đàn!
    E mới học lập trình c và gặp phải vấn đề thắc mắc nhờ mọi người giúp đỡ
    E muốn viết một chương trình con để truyền vào một chuỗi sau đó xử lý đảo ngược thứ tự các phần tử trong chuỗi
    và trả về chuỗi mới đã được đảo ngược
    thứ tự.
    Ví dụ:
    truy ền vào chuỗi"123456789"
    và yêu cầu hàm trả về chuỗi mới là"987654321"
    Code của e như sau biên dịch k lỗi nhưng
    chạy k đúng yêu cầu

    char *nhan(char *truyen)
    {
    unsigned char i=0 , j=0, *chuoi;
    while(truyen[i]!=0) i++; //su dung bien i de xac dinh so ky tu trong chuoi truyen vao
    while(i>=0)
    {/*o day em lay phan tu co chi so lon nhat
    cua chuoi truyen gan cho phan tu co chi so
    nho nhat cua mang nhan*/
    chuoi[j]=truyen[i-1];
    i--;
    j++;
    }
    return chuoi;
    }
    Code của bạn. Mình đã chữa.
    C Code:
    1. #include <stdlib.h>
    2.  
    3. char *nhan(const char *truyen)
    4. {
    5.     unsigned i=0, j=0;
    6.     char *chuoi;
    7.     while(truyen[i] != 0) i++; //su dung bien i de xac dinh so ky tu trong chuoi truyen vao
    8.     chuoi = malloc(i+1);
    9.     chuoi[i] = 0;
    10.     while( i > 0 )
    11.     {    /*o day em lay phan tu co chi so lon nhat
    12.     cua chuoi truyen gan cho phan tu co chi so
    13.     nho nhat cua mang nhan*/
    14.         chuoi[j]=truyen[i-1];
    15.         i--;
    16.         j++;
    17.     }
    18.     return chuoi;
    19. }
    20.  
    21. int main()
    22. {
    23.     printf("%s\n", nhan(""));
    24.     printf("%s\n", nhan("a"));
    25.     printf("%s\n", nhan("ab"));
    26.     printf("%s\n", nhan("abc"));
    27. }
    -...- -.- .. .-.. .-.. - .... . -... . .- ... - .-.-.

  4. #4
    Ngày gia nhập
    02 2016
    Bài viết
    298

    Trích dẫn Nguyên bản được gửi bởi thinbumbum Xem bài viết
    ... muốn viết một chương trình con để truyền vào một chuỗi sau đó xử lý đảo ngược thứ tự các phần tử trong chuỗi
    và trả về chuỗi mới đã được đảo ngược thứ tự.
    Chuỗi mới tức là (1) chuỗi kia đã được đảo ngựoc? hay là (2) một chuỗi khác hoàn toàn?
    Nếu trường hợp (2) thì lỗi tại code của bạn chủ yếu bị chưa gán bộ nhớ cho chuỗi mới

    // Code đảo ngược ký tự trong chuỗi. Nếu muốn chuỗi khác thì thêm phần code copy chuỗi trước code này
    char c; // c = biến tạm để hoán trị
    char *pdau = *pdit = truyen -1 ; // pdau = con trỏ đầu, pdit = con trỏ đít
    while (*++pdit); // dời con trỏ đít xuống đuôi chuỗi
    while (++pdau < --pdit) // từ từ dời hai con trỏ vào nhau
    {
    c = *pdau;
    *pdau = *pdit;
    *pdit = c;
    }
    // chạy hết vòng lặp thì được chuỗi đã đảo nghịch

    Code trên là không dùng hàm thư viện str của C
    Nếu dùng thì ngắn hơn một chút

    char c;
    for (char *pdau = truyen -1, *pdit = truyen + strlen(truyen); ++pdau < --pdit; )
    {
    c = *pdau;
    *pdau = *pdit;
    *pdit = c;
    }

  5. #5
    Ngày gia nhập
    09 2018
    Bài viết
    2

    Xin cảm ơn mọi người đã giành thời gian trả lời thắc mắc của em.
    Sau khi sửa lại code như hướng dẫn thì chương trình đã chạy đúng, tuy vậy vì mới học nên cũng mới
    Hiểu được một chút chứ chưa thực sự nắm vững phần này.
    Sẽ cố gắng tìm hiểu thêm.
    Chúc mọi người vui nhé!

Quyền hạn của bạn

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