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

Đề tài: Không hiểu ý nghĩa thuật toán nối liền 2 dấu cách liền nhau trong chuẩn hóa chuỗi

  1. #1
    Ngày gia nhập
    10 2011
    Bài viết
    1

    Mặc định Không hiểu ý nghĩa thuật toán nối liền 2 dấu cách liền nhau trong chuẩn hóa chuỗi

    tình hình là em thấy trong bài tập có cái phần về chuẩn hóa chuỗi , cụ thể là nối 2 hay nhiều dấu cách liền nhau thành 1 dấu cách nên em mạn phép lên đây nhờ các cao nhân chỉ dạy ak
    bỏ khoảng trắng thừa ở giữa
    Code:
    C Code:
    1. for (int i=0; i<strlen(s)-1; i++)
    2.                 if (s[i]==' ' && s[i+1]==' ')
    3.                 {
    4.                         for (int j=i+1; j<strlen(s)-1; j++) s[j]=s[j+1];
    5.                         s[strlen(s)-1]='\0';
    6.                         i--; //Nếu không lùi thì sẽ bị bỏ qua khoảng trắng liền nhau
    7.                 }
    gán s[j]=s[j+1] thì em hiểu r nhưng mà còn dòng
    s[strlen(s)-1]='\0';
    i--; //Nếu không lùi thì sẽ bị bỏ qua khoảng trắng liền nhau
    ý nghĩa của nó là sao ak .rất mong các cao nhân giúp đỡ đàn em vs ak

  2. #2
    Ngày gia nhập
    01 2011
    Nơi ở
    -Mountain-
    Bài viết
    768

    Trích dẫn Nguyên bản được gửi bởi giang92 Xem bài viết
    tình hình là em thấy trong bài tập có cái phần về chuẩn hóa chuỗi , cụ thể là nối 2 hay nhiều dấu cách liền nhau thành 1 dấu cách nên em mạn phép lên đây nhờ các cao nhân chỉ dạy ak
    bỏ khoảng trắng thừa ở giữa
    Code:
    C Code:
    1. for (int i=0; i<strlen(s)-1; i++)
    2.                 if (s[i]==' ' && s[i+1]==' ')
    3.                 {
    4.                         for (int j=i+1; j<strlen(s)-1; j++) s[j]=s[j+1];
    5.                         s[strlen(s)-1]='\0';
    6.                         i--; //Nếu không lùi thì sẽ bị bỏ qua khoảng trắng liền nhau
    7.                 }
    gán s[j]=s[j+1] thì em hiểu r nhưng mà còn dòng

    ý nghĩa của nó là sao ak .rất mong các cao nhân giúp đỡ đàn em vs ak
    Kiểu như bạn nuôi gà nhé. khi mà một vài con ở mấy chuồng bị thịt thì bạn phải dồn chúng lại cho tiết kiệm diện tích thức ăn ....
    Cái chuồng trống thì có thể thu hồi mang đi chỗ khác. Chứ cứ để đó mà không dọn thì bừa bãi lắm
    Hướng dẫn C++: https://www.youtube.com/watch?v=BwLodoQdoY4&list=PL1c9Uxlo-mplJDRGdONNupgo5OCBTyGGn

  3. #3
    Ngày gia nhập
    10 2011
    Bài viết
    1

    bác nói rõ cơ chế hoạt động của thuật toán em hỏi trong bài này giúp em vs . Em vẫn chưa hiểu lắm bác ak
    bác ví dụ vào bài gộp dấu cách này đi ak

  4. #4
    Ngày gia nhập
    10 2011
    Bài viết
    552

    i-- lui là để ra vòng for chính ở ngoài. i nó lại ++
    Làm xong cái ruột: i-- .
    Tiếp đến i++ (ở for) . Rồi lặp lại vòng lặp .

    Sở dĩ làm vậy để kiểm tra cho chắc cú nhỡ phần tử mới khi dập ngược vào chỗ vừa xóa, nó có ==' ' nữa ko..

    Cụ thể là : Nếu xóa,thì xóa xong và ko tăng i(để còn kiểm tra cái thằng mới nhảy vào) . Còn ko xóa gì cả, thì cư tăng i lên như thường
    Um Mani Padme Hum...!!

  5. #5
    Ngày gia nhập
    01 2011
    Nơi ở
    -Mountain-
    Bài viết
    768

    Trích dẫn Nguyên bản được gửi bởi clchicken Xem bài viết
    i-- lui là để ra vòng for chính ở ngoài. i nó lại ++
    Làm xong cái ruột: i-- .
    Tiếp đến i++ (ở for) . Rồi lặp lại vòng lặp .

    Sở dĩ làm vậy để kiểm tra cho chắc cú nhỡ phần tử mới khi dập ngược vào chỗ vừa xóa, nó có ==' ' nữa ko..

    Cụ thể là : Nếu xóa,thì xóa xong và ko tăng i(để còn kiểm tra cái thằng mới nhảy vào) . Còn ko xóa gì cả, thì cư tăng i lên như thường
    Giải thích như bạn mình đọc tới lần t5 vẫn không hiểu @@.
    @chủ pic: cụ thể là thế này. Nếu thằng i và thằng j là dấu cách thì nhiệm vụ của mình là
    - xóa bỏ thằng j--> cho j = j+1. j+1 = j+2 ......... -----> lặp đến thằng cuối cùng
    ------> 2 thằng cuối giống nhau bởi vì khi dịch chuyển thế này thì thằng j lại giống thằng j+1
    ------> gán thằng cuối cùng bằng null tức là '\0'. Sau đó gạt bỏ ô nhớ cuối cùng vì không dùng tới nữa
    tức là i --
    Hướng dẫn C++: https://www.youtube.com/watch?v=BwLodoQdoY4&list=PL1c9Uxlo-mplJDRGdONNupgo5OCBTyGGn

  6. #6
    Ngày gia nhập
    10 2011
    Bài viết
    552

    Mặc định Không hiểu ý nghĩa thuật toán nối liền 2 dấu cách liền nhau trong chuẩn hóa chuỗi

    -----> gán thằng cuối cùng bằng null tức là '\0'. Sau đó gạt bỏ ô nhớ cuối cùng vì không dùng tới nữa
    tức là i --
    Theo ngu ý của mình thì việc gạt bỏ ô cuối thì đâu liên quan gì đến việc i-- mà lại dùng từ "TỨC LÀ" ??

    i-- là để dừng i "tạm thời" để lượt lặp sau ta kiểm tra s[i] (mới) nó như thế nào cho chắc cú thôi chứ ??

    Đuổi xong 1 thằng thì sẽ có thằng khác nhảy vào ngồi vào đấy. Thì ta khoan dời bước qua chỗ khác mà hãy dừng chân lại 1 tí xem CÁI THẰNG MỚI NHẢY VÀO nó có cần được "đuổi" đi ko chứ ?
    ____________
    Ở cái đoạn dập dồn từ sau lên trước thay vì viết for phiếc nó daì ấy.
    Viết cái này cho gọn nè
    strcpy(&s[i],&s[i+1]);
    Um Mani Padme Hum...!!

  7. #7
    Ngày gia nhập
    10 2011
    Bài viết
    1

    Trích dẫn Nguyên bản được gửi bởi clchicken Xem bài viết
    Theo ngu ý của mình thì việc gạt bỏ ô cuối thì đâu liên quan gì đến việc i-- mà lại dùng từ "TỨC LÀ" ??

    i-- là để dừng i "tạm thời" để lượt lặp sau ta kiểm tra s[i] (mới) nó như thế nào cho chắc cú thôi chứ ??

    Đuổi xong 1 thằng thì sẽ có thằng khác nhảy vào ngồi vào đấy. Thì ta khoan dời bước qua chỗ khác mà hãy dừng chân lại 1 tí xem CÁI THẰNG MỚI NHẢY VÀO nó có cần được "đuổi" đi ko chứ ?
    ____________
    Ở cái đoạn dập dồn từ sau lên trước thay vì viết for phiếc nó daì ấy.
    Viết cái này cho gọn nè
    strcpy(&s[i],&s[i+1]);
    em cũng định dùng strcpy(&s[i],&s[i+1]);
    mà viết mãi ko đc .
    p/s: sao em dùng ko đc bác nhỉ .vẫn ko đúng ak
    code em
    C Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3. #include<string.h>
    4. main()
    5. {
    6.     char s[200];
    7.     int i;
    8.     printf("Nhap chuoi: ");
    9.     gets(s);
    10.         for (int i=0; i<strlen(s)-1; i++)
    11.                 if (s[i]==' ' && s[i+1]==' ')
    12.                 strcpy(&s[i],&s[i+1]);
    13.                  s[strlen(s)]='\0';
    14.         puts(s);
    15.                         getch();
    16.                         }
    ak em code thế này thì lại oke bác ak .hihi. bác cho em cảm ơn bác thêm lần nữa nhá .hé hé
    C Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3. #include<string.h>
    4. main()
    5. {
    6.     char s[200];
    7.     int i;
    8.     printf("Nhap chuoi: ");
    9.     gets(s);
    10.         for (int i=0; i<strlen(s)-1; i++)
    11.                 while(s[i]==' ' && s[i+1]==' ')
    12.                 strcpy(&s[i],&s[i+1]);
    13.         puts(s);
    14.                         getch();
    15.                         }
    Đã được chỉnh sửa lần cuối bởi giang92 : 06-12-2011 lúc 10:47 PM.

  8. #8
    Ngày gia nhập
    01 2011
    Nơi ở
    -Mountain-
    Bài viết
    768

    Trích dẫn Nguyên bản được gửi bởi clchicken Xem bài viết
    Theo ngu ý của mình thì việc gạt bỏ ô cuối thì đâu liên quan gì đến việc i-- mà lại dùng từ "TỨC LÀ" ??

    i-- là để dừng i "tạm thời" để lượt lặp sau ta kiểm tra s[i] (mới) nó như thế nào cho chắc cú thôi chứ ??

    Đuổi xong 1 thằng thì sẽ có thằng khác nhảy vào ngồi vào đấy. Thì ta khoan dời bước qua chỗ khác mà hãy dừng chân lại 1 tí xem CÁI THẰNG MỚI NHẢY VÀO nó có cần được "đuổi" đi ko chứ ?
    ____________
    Ở cái đoạn dập dồn từ sau lên trước thay vì viết for phiếc nó daì ấy.
    Viết cái này cho gọn nè
    strcpy(&s[i],&s[i+1]);

    uh chết. Nhầm chỗ i--
    Hướng dẫn C++: https://www.youtube.com/watch?v=BwLodoQdoY4&list=PL1c9Uxlo-mplJDRGdONNupgo5OCBTyGGn

  9. #9
    Ngày gia nhập
    12 2009
    Nơi ở
    The country of happiness
    Bài viết
    182

    code này có sai ko nhỉ
    C++ Code:
    1. string s;
    2. string ret = "";
    3. void read() {
    4.     getline(cin,s);
    5. }
    6.  
    7. void solve() {
    8.     int i = 0, j = 0;
    9.     int len = s.length();
    10.     // bo khoang trang o dau
    11.     while(j < len){
    12.         if(s[j] == ' '){
    13.             j++;
    14.         }
    15.         else break;
    16.     }
    17.     // chuan hoa
    18.     for(i = j; i < len; ++i){
    19.         ret += s[i];
    20.         if(s[i] == ' '){
    21.             while(s[i] == ' '){
    22.                 i++;
    23.             }
    24.             i--;// quay lai keo mat 1 ki tu thi chit
    25.         }
    26.     }
    27.     cout << ret;
    28. }
    Trích dẫn Nguyên bản được gửi bởi Wazi Armstrong Xem bài viết
    Ôi skill của mình đã đạt đến hàng tuyệt đỉnh
    Không chỉ ăn, tắm, đi lại có thể code
    Mà giờ đã mình có thể code cả khi ngủ. Code tạm vào buffer của não, lúc nào dậy chỉ việc viết ra một cách trôi chảy không lưỡng lự.
    PS: Nếu ngủ dài rảnh rảnh có thể debug luôn, dậy chỉ việc build ?
    Trích dẫn Nguyên bản được gửi bởi vietanh8286 Xem bài viết
    Lập trình viên giỏi là lập trình viên có vợ

Các đề tài tương tự

  1. Bài tập về chuẩn hóa chuỗi
    Gửi bởi thongnlkh_aptech trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 22
    Bài viết cuối: 29-04-2014, 12:11 AM
  2. Algorithm Chuyển code tách chuỗi , chuẩn hóa trong văn bản TV từ VB sang C#?
    Gửi bởi gvkatashi01 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 18-11-2013, 05:24 PM
  3. Chuẩn hóa chuỗi!!! Help
    Gửi bởi pato24193 trong diễn đàn Nhập môn lập trình Java
    Trả lời: 1
    Bài viết cuối: 02-01-2013, 09:32 PM
  4. Bài tập C thắc mắc về thuật toán chuẩn hóa chuỗi
    Gửi bởi behoclaptrinh1993 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 5
    Bài viết cuối: 14-11-2011, 09:32 AM
  5. Hỏi về chuẩn hóa chuỗi ký tự trong MFC (VC++)
    Gửi bởi huyfeng trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 7
    Bài viết cuối: 14-10-2009, 02:42 PM

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