Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 13 kết quả

Đề tài: [VC++]Cấp phát động cho một chuỗi.

  1. #1
    Ngày gia nhập
    04 2007
    Bài viết
    30

    Smile [VC++]Cấp phát động cho một chuỗi.

    1..ví dụ em khai báo 1 chuỗi char s[100] , máy sẽ dành ra 100 ô nhớ để chứa 100 kí tự nhưng khi nhập dữ liệu em lại không sử dụng hết 100 ô đó , có cách nào giải phóng bớt số vùng nhớ thừa không

    2..trong VC++ có cách nào hiển thị thời gian chạy chương trình không , em muốn dùng nó để kiểm tra thuật toán nào chạy nhanh hơn cái nào

  2. #2
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    1. Dạ câu 1 kidkid em xin trả lời bác là hình như không có cách nào cả ? Nếu có cũng chỉ là cách không chính qui thôi và lắm rắc rối . U có thể từ từ học lên sẽ thấy được các hàm cấp phát động , và nó sẽ giải quyết cho U . Cụ thể là các hàm malloc realloc alloc trong C và new trong C++.

    2. Với câu 2 em xin góp ý là em kô biết có thuật toán nào như vậy cả nhưng em có ý thế này :
    + Đầu chương trình bác dùng hàm gettime() để lấy thời gian
    + Cuối chương trình bác dùng hàm gettime() 1 lần nữa
    + Trừ nó cho nhau rồi in kết quả thì bác sẽ có thời gian chạy chương trình .

  3. #3
    Ngày gia nhập
    04 2007
    Bài viết
    30

    hàm cấp phát động NEW trong C++ thì mình cũng bít rùi , nhưng cái đó mình chỉ bít dùng cho mảng, còn đối với chuỗi , chưa xác định được chiều dài thì làm sao cấp phát vùng nhớ cho nó

  4. #4
    Ngày gia nhập
    07 2006
    Bài viết
    121

    Trích dẫn Nguyên bản được gửi bởi HKuspc Xem bài viết
    hàm cấp phát động NEW trong C++ thì mình cũng bít rùi , nhưng cái đó mình chỉ bít dùng cho mảng, còn đối với chuỗi , chưa xác định được chiều dài thì làm sao cấp phát vùng nhớ cho nó
    Chuỗi là một mảng các ký tự kiểu char và cuối mảng luôn là ký tự kết thúc mảng :có mã bằng 0.

    OoShinHaoO

  5. #5
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    + Thiệt thấy bóng dáng của shinichi trở lại kid tui vô cùng vui vẻ ( Cả nghĩa đen trong CViet và nghĩa bóng trng Conan) .
    + Theo kid nghĩ không phải HKuspc hỏi như shinichi đã trả lời đâu , ở đây chắc huynh ấy hỏi là để nhập một chuỗi thì làm sao cấp phát vùng nhớ chính xác cho chuỗi ấy! Ví dụ như để nhập tên của một người chúng ta không thể hỏi là tên của mày bao nhiêu kí tự mà lưu vào n để dùng s= new name[n+1]; được ? Không biết có phải thế không ? Nếu như thế thì kid tui có 3 hướng giải quyết 2 hướng cực dở và một hướng cũng được !

    + Thể theo tinh thần anh em thì chỉ nêu hướng tạm tạm này ra , như shinichi đã nói là chuỗi là một mảng như vậy đầu tiên cậu chỉ việc khai báo cho nó một mảng kiểu char 2 phần tử là được rồi ! Sau đó nếu người ta nhập vào thì cậu kiểm tra thử có phải người ta nhấn enter hay không ? Nếu phải thì thôi còn không phải thì cấp phát thêm 1 thèng nữa để chứa kí tự đó ! Nếu cậu cứ nhất quyết dùng C++ thì tớ nghĩ phải kết hợp giữa new và strmcpy() tuy nhiên trong C có cái hàm realloc dùng để cấp thêm rất tiện lợi . Cậu chỉ việc dùng thoải mái thôi !

  6. #6
    Ngày gia nhập
    07 2006
    Bài viết
    121

    Mặc định [VC++]Cấp phát động cho một chuỗi.

    hix! bữa nay ở HCM lúc nắng lúc mưa shin mới đi lòng vòng mà phát bệnh nãy giờ mới trả lời 2 câu hỏi mà đều lạc đề hix. Thông cảm nha!

    OoShinHaoO

  7. #7
    Ngày gia nhập
    04 2007
    Bài viết
    30

    hu hu cái gettime() dùng ko được , em ko thấy nó trong số từ khóa của C++

  8. #8
    Ngày gia nhập
    01 2007
    Bài viết
    412

    Trích dẫn Nguyên bản được gửi bởi HKuspc Xem bài viết
    1..ví dụ em khai báo 1 chuỗi char s[100] , máy sẽ dành ra 100 ô nhớ để chứa 100 kí tự nhưng khi nhập dữ liệu em lại không sử dụng hết 100 ô đó , có cách nào giải phóng bớt số vùng nhớ thừa không
    Do tính chất chuỗi là mảng các ký tự, nên bạn có thể dùng danh sách liên kết đơn để giả lập một chuỗi, nghĩa là mỗi một nút trong danh sách liên kết đơn sẽ chứa 1 ký tự. Vậy bạn sẽ hỏi "làm sao để nhập chuỗi", cũng không khó lắm, thay vì hàm chèn 1 giá trị vào danh sách liên kết đơn, bạn cho giá trị này kiểu char là xong, nhớ dùng vòng lặp do...while để chèn kí tự vào DSLK đơn nhá, chẳng hạn nhập một chuỗi các ký tự, khi nhập đến ký tự '+' thì kết thúc việc nhập. Thế là xong, tiết kiệm ô nhớ như ý bạn nói )

  9. #9
    Ngày gia nhập
    07 2006
    Bài viết
    9

    Cách lấy thời gian chạy trong VC.
    - Đầu tiên bạn gọi hàm QueryPerformanceFrequency(&m_dwFrequency) để lấy tần số của bộ đếm hiệu năng cao.
    - Đầu đoạn mã mà bạn cần đo thời gian gọi hàm m_QueryPerformanceCounter(&m_dwSttCounter).
    - Cuối đoạn mã đó cũng gọi hàm QueryPerformanceCounter(&m_dwStpCounter).
    - Kết quả thời gian chạy bằng (m_dwStpCounter-m_dwSttCounter)/m_dwFrequency.
    Để hiểu thêm bộ đếm này hãy tham khảo MSDN.
    Trên CodeProject họ đã xây dựng một lớp CProfiler để giám sát thời gian chạy sử dụng các hàm trên, bạn nên tham khảo.
    Đây là cách lấy thời gian chính xác nhất trong VC.

  10. #10
    Ngày gia nhập
    04 2007
    Bài viết
    30

    cám ơn các bác quá ^ ^

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

  1. Bài tập C++ Cách để so sánh 2 chuỗi kí tự giữa chuỗi nhập từ phím và chuỗi từ file xem có giống nhau không?
    Gửi bởi davilson18 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 09-06-2012, 09:47 AM
  2. Lập trình C Thay thế chuỗi s1 trong chuỗi s bằng chuỗi s
    Gửi bởi duytue trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 7
    Bài viết cuối: 23-09-2011, 04:16 PM
  3. thay thế chuỗi con thứ i trong chuỗi mẹ bằng 1 chuỗi khác
    Gửi bởi nhat1811 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: 06-08-2011, 08:25 AM
  4. Trả lời: 1
    Bài viết cuối: 29-06-2011, 12:02 AM
  5. xem một từ trong chuỗi là một chuỗi con, sắp xếp các chuỗi con theo thứ tự tăng dần
    Gửi bởi qpkdct1101 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 0
    Bài viết cuối: 20-01-2011, 08:22 AM

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