Trang 1 trên tổng số 3 123 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 26 kết quả

Đề tài: Xử lý nhanh hơn với strlen của string (đố vui)

  1. #1
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,007

    Mặc định Xử lý nhanh hơn với strlen của string (đố vui)

    Nói rõ là đố vui, ai ko thích đừng spam hay ý kiến này nọ nha, đố vui cũng là adv kĩ năng code cho các bạn thui

    1.hãy tìm cách khác nhanh hơn cách sau (4 điểm)
    C++ Code:
    1.         if (strlen(temp)>0)
    2.         {
    3.         //...code
    4.         }


    2. hãy tìm cách khác nhanh hơn cách sau (4 điểm)
    C++ Code:
    1.         for(int i=0;i<strlen(str);i++)
    2.         {
    3.         //...code
    4.         }

    3. kĩ năng mềm : biện luận tại sao nó lại nhanh hơn, nói rõ ưu nhược điểm nếu có(2 điểm)
    ^_,^

    Facebook : https://www.facebook.com/langmaninternet

    Bùi Tấn Quang

  2. #2
    Ngày gia nhập
    12 2009
    Bài viết
    190

    1.
    C Code:
    1. if (temp[0] != '\0')
    2.
    C Code:
    1. int str_len = strlen(str);
    2. for(int i = 0; i < str_len; i++)

  3. #3
    Ngày gia nhập
    03 2009
    Nơi ở
    %appdata%\Temp
    Bài viết
    819

    2.
    C Code:
    1. for(int i = 0; str[i] != '\0'; ++i)
    .::[The best way to predict the future is to invent it]::.
    __________________________________________________ _ - Alan Kay -

  4. #4
    Ngày gia nhập
    08 2010
    Nơi ở
    Moscow, Russia Federation
    Bài viết
    913

    C++ Code:
    1.       1.
    2.       if (*str) {
    3.       }
    4.  
    5.       if (str[0]) {
    6.       }
    7.  
    8.       if (1 & str[0]) {
    9.       }
    10.  
    11.       if (0 | str[0]) {
    12.       }
    13.  
    14.       if (1 && str[0]) {
    15.       }
    16.  
    17.       if (0 || str[0]) {
    18.       }
    19.  
    20.      2.
    21.  
    22.       for (int i = 0; str[i]; i ++) {
    23.       }
    24.  
    25.       for (int i = 0; str[i ++];) {
    26.       }
    27.  
    28.       for (int i = 0; i[str]; i ++) {
    29.       }
    30.  
    31.       for (int i = 0; (i++)[str]; ) {
    32.       }
    33.  
    34.       for (int i = -1; (++ i)[str];) {
    35.       }
    36.  
    37.       for (int i = 0; *(i + str); ) {
    38.       }
    39.  
    40.       for (int i = 0; *str; ) {
    41.       }
    Mời các bạn ghé thăm blog cá nhân của tôi

  5. #5
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,760

    Mấy câu lệnh: if (*str), và if (str[0]), và if (temp[0] != '\0') sẽ luôn luôn đúng trong một số trường hợp, có nhĩa là các bạn đã viết một code không an toàn.
    Email: kevin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó.
    Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp hoặc bị sự thiếu kỷ luật làm tiêu tan sự nghiệp.

  6. #6
    Ngày gia nhập
    12 2010
    Bài viết
    129

    Mặc định Xử lý nhanh hơn với strlen của string (đố vui)

    PHP Code:
    int str=strlen(temp)
    if(
    str)
    {


  7. #7
    Ngày gia nhập
    02 2011
    Nơi ở
    Hà Nội
    Bài viết
    67

    Trích dẫn Nguyên bản được gửi bởi langman Xem bài viết
    Nói rõ là đố vui, ai ko thích đừng spam hay ý kiến này nọ nha, đố vui cũng là adv kĩ năng code cho các bạn thui

    1.hãy tìm cách khác nhanh hơn cách sau (4 điểm)
    C++ Code:
    1.         if (strlen(temp)>0)
    2.         {
    3.         //...code
    4.         }


    2. hãy tìm cách khác nhanh hơn cách sau (4 điểm)
    C++ Code:
    1.         for(int i=0;i<strlen(str);i++)
    2.         {
    3.         //...code
    4.         }

    3. kĩ năng mềm : biện luận tại sao nó lại nhanh hơn, nói rõ ưu nhược điểm nếu có(2 điểm)
    Trả lời:
    1. mục đích câu lệnh if ở trên là kiểm tra xem temp có phải là xâu rỗng hay không. Viết lại:
    C Code:
    1. if(*temp!=NULL){
    2.     // câu lệnh ở đây
    3. }

    2. dùng thêm một biến phụ để lưu chiều dài xâu. Ví dụ
    C Code:
    1. int length= strlen(str);
    2. for(int i=0; i<length; i++){
    3.     // câu lệnh ở đây
    4. }

    3. Biện luận.
    Cả hai code của bác langman đưa ra đều phải gọi đến hàm strlen. gọi hàm tốn những chi phi nhất định về thời gian và bộ nhớ. đặc biệt trong code thứ hai, mỗi lần chạy vòng for một lần thì lại phải gọi tới hàm strlen, trong khi chiều dài của xâu là vẫn cố định. Biện pháp là dùng thêm một biến phụ length để lưu độ dài xâu, như vậy hàm strlen chỉ cần gọi một lần. Tuy nhiên nếu trong thân vòng for có những lệnh làm "co dãn" xâu thì làm vậy sẽ bị lỗi, ví dụ đoạn for này thực hiện việc xóa bỏ những dấu trắng thừa trong xâu str chẳng hạn. Khi đó chiều dài của xâu cần được "cập nhật" liên tục, nên phải dùng code ban đầu như của bác langman.
    Em chỉ nghĩ được thế thôi
    Vấn đề không phải là bước nhanh, mà là luôn luôn bước

  8. #8
    Ngày gia nhập
    08 2010
    Nơi ở
    Moscow, Russia Federation
    Bài viết
    913

    Anh có thể cho một vài ví dụ về điều này?
    Mời các bạn ghé thăm blog cá nhân của tôi

  9. #9
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,007

    @mp : nhanh nhất thì chỉ có 1 thôi, các code của cậu trừ dòng đầu tiên ra, chả có cái nào được xét là nhất, hoặc hơn cả, nhưng mà thật đáng khen ngợi vì khả năng mở rộng ra nhiều tình huống

    @fb :
    1. hơn , nhưng chưa phải nhất : 3.5 điểm
    2. hơn, nhưng code đóng gói kém, 3.5 điểm
    3. biện luận khá ,chưa nghĩ đến update 1.5 điểm
    ^_,^

    Facebook : https://www.facebook.com/langmaninternet

    Bùi Tấn Quang

  10. #10
    Ngày gia nhập
    02 2011
    Nơi ở
    Hà Nội
    Bài viết
    67

    Trích dẫn Nguyên bản được gửi bởi langman Xem bài viết
    @mp : nhanh nhất thì chỉ có 1 thôi, các code của cậu trừ dòng đầu tiên ra, chả có cái nào được xét là nhất, hoặc hơn cả, nhưng mà thật đáng khen ngợi vì khả năng mở rộng ra nhiều tình huống

    @fb :
    1. hơn , nhưng chưa phải nhất : 3.5 điểm
    2. hơn, nhưng code đóng gói kém, 3.5 điểm
    3. biện luận khá ,chưa nghĩ đến update 1.5 điểm
    Trả lời:
    1. chắc cái này nhất
    C Code:
    1. if(*temp){
    2.     // code ở đây
    3. }

    2. Cái này đóng gói tốt hơn, chạy cũng tốt hơn
    C Code:
    1. while(*s++){
    2.     // code
    3. }
    3. Cái code thứ hai thì update được rồi
    Vấn đề không phải là bước nhanh, mà là luôn luôn bước

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

  1. Công dụng và cách thứ hoạt động của strlen trong C?
    Gửi bởi 7261819 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 18-11-2015, 11:25 AM
  2. code lại các hàm strlen, strcat, strcopy. Giúp mình?
    Gửi bởi andriy cross trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 03-04-2012, 02:38 PM
  3. Bài tập chuỗi!! thắc mắc về strlen()
    Gửi bởi utkunglt trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 14-09-2011, 12:35 PM
  4. Sử dụng strlen và strcmp như thế nào?
    Gửi bởi DragonKillerngh trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 14-12-2010, 05:17 PM
  5. ham strlen,strrev,strrchr có tác dụng gì?
    Gửi bởi thanhdieu trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 11-12-2010, 10:35 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