Công cụ bảo vệ mã nguồn .NET mạnh nhất, không thể unpack, miễn phí cho các khách hàng đầu tiên đăng ký.
Trang 2 trên tổng số 21 Đầu tiênĐầu tiên 123412... Cuối cùngCuối cùng
Từ 11 tới 20 trên tổng số 209 kết quả

Đề tài: [Series] Cốt đờ Quán !

  1. #11
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Mặc định [Series] Cốt đờ Quán !

    More general solution, the same idea
    C++ Code:
    1. #include <iostream>
    2. #include <fstream>
    3. #include <vector>
    4. #include <cstdlib>
    5. #include <algorithm>
    6. #include <stdexcept>
    7.  
    8. using std::ostream;
    9. using std::ifstream;
    10. using std::ios;
    11. using std::cout;
    12. using std::cin;
    13. using std::string;
    14. using std::vector;
    15. using std::getline;
    16. using std::logic_error;
    17.  
    18. class HugeBuffer
    19. {
    20. private :
    21.     ifstream          m_inf;
    22.     vector< string >  m_lines;
    23.     double            m_buf_size;
    24.     int               m_number_lines;
    25.  
    26. public :
    27.     HugeBuffer( const string& file_name )
    28.         :
    29.             m_buf_size( 0 ), m_number_lines( 0 )
    30.     {
    31.         m_inf.open( file_name.c_str() );
    32.         if( m_inf.fail() )
    33.         {
    34.             throw logic_error( "...File not found !\n" );
    35.         }
    36.         else
    37.         {
    38.             calculateBufferSize();
    39.             putLinesIntoContainer();
    40.         }
    41.     }
    42.  
    43.     ~HugeBuffer()
    44.     {
    45.         m_inf.close();
    46.     }
    47.  
    48. private :
    49.     void calculateBufferSize()
    50.     {
    51.         long be  = m_inf.tellg();
    52.         m_inf.seekg( 0, ios::end );
    53.         long en  = m_inf.tellg();
    54.         m_buf_size = ( en - be );
    55.     }
    56.  
    57.     void putLinesIntoContainer()
    58.     {
    59.         m_inf.clear();
    60.         m_inf.seekg( 0 );
    61.         string line;
    62.         while( getline( m_inf, line ) )
    63.         {
    64.             m_lines.push_back( line );
    65.             m_number_lines++;
    66.         }
    67.         vector< string >( m_lines ).swap( m_lines );
    68.     }
    69.  
    70.     ostream& printBufferInfo( ostream& out ) const
    71.     {
    72.         if( m_number_lines == 0 )
    73.         {
    74.             out << "Empty file \n";
    75.         }
    76.         else
    77.         {
    78.             out << "- File size    : " << m_buf_size << " bytes.\n";
    79.             out << "- Total lines  : " << m_number_lines << "\n";
    80.             out << "- Content file : \n";
    81.             vector< string >::const_iterator i = m_lines.begin(),
    82.                                              e = m_lines.end();
    83.  
    84.             int count = 0;
    85.             for( ;i != e; ++i )
    86.             {
    87.                 out << " Lines # " << count + 1 << "\n";
    88.                 out << *i << "\n";
    89.             }
    90.         }
    91.         return out;
    92.     }
    93.  
    94. public :
    95.     friend ostream& operator <<( ostream& out, const HugeBuffer& buf )
    96.     {
    97.         buf.printBufferInfo( out );
    98.         return out;
    99.     }
    100. };
    101.  
    102.  
    103. int main()
    104. {
    105.     string file_name;
    106.  
    107.     cout << "Input a file name \n";
    108.     getline( cin, file_name );
    109.  
    110.     HugeBuffer my_file( file_name );
    111.  
    112.     cout << my_file << "\n";
    113.  
    114.     return 0;
    115. }
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

  2. #12
    Ngày gia nhập
    09 2006
    Nơi ở
    /usr/share/.hack@
    Bài viết
    1,433

    Mặc định [1]

    Thấy anh em tham gia rất vui, lại có được nhiều cách giải hay .

    Mình không nghĩ được phức tạp chi tiết như các cậu nên chỉ code được thế này thôi.

    1. Linux / GCC
    2. Code cũng được, test chưa thấy bug tạm thời
    3.
    C++ Code:
    1. char *line(FILE *in) {
    2.     char *line;
    3.     int line_size = 0, ch;
    4.    
    5.     while ((ch = fgetc(in)) != EOF) {
    6.         line_size++;
    7.         if (ch == '\n' || ch == '\r') break;
    8.     }
    9.     line_size++;
    10.     line = malloc(line_size);
    11.     if (!line) return NULL ;
    12.     fseek(in, -line_size, SEEK_CUR);
    13.     fgets(line, line_size, in);
    14.     return line;
    15. }
    16.  
    17. char **lines(FILE *in, int *count) {
    18.     char **lines;
    19.     int lines_count = 0, index, ch = 0;
    20.     while ((ch = fgetc(in)) != EOF) { lines_count += (ch == '\n'); }
    21.     lines = malloc(sizeof(char*) * lines_count + 1);
    22.     if (!lines) return NULL ;
    23.     fseek(in, 0, SEEK_SET);
    24.     for (index = 0; index < lines_count; index++) {
    25.         lines[index] = read_line(in);
    26.     }
    27.     lines[index] = 0;
    28.     *count = lines_count;
    29.        return lines;
    30. }

    mời anh em thưởng thức và cùng góp ý
    None!

  3. #13
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Code này thì dễ hiểu và giải quyết tốt vấn đề nhưng mà chi phí đọc file hơi cao. Phải đọc file 3 lần : một lần đọc trước, một lần quay lại đọc lại, lần thứ 3 đếm '\n'. Nếu bạn cache lại một lần đọc thì sẽ nhanh hơn nhiều.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  4. #14
    Ngày gia nhập
    12 2007
    Bài viết
    48

    1) Anh Rook cho em hỏi chỗ:
    vector< string >( m_lines ).swap( m_lines );
    để làm gì vậy? Sao lại khai báo lại m_lines?
    Bỏ đi thấy vẫn chạy bình thường.
    2) By the way, anh Rook thiếu #include<string> và count++ ^^

  5. #15
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    2) By the way, anh Rook thiếu #include<string> và count++ ^^
    Nice catch !

    1) Anh Rook cho em hỏi chỗ:
    vector< string >( m_lines ).swap( m_lines );
    để làm gì vậy? Sao lại khai báo lại m_lines?
    Bỏ đi thấy vẫn chạy bình thường.
    Very good observation !
    Chỗ này dùng để tránh capacity của vector nó grow lên quá lớn, vì trong code anh dùng push_back mà đọc file thì không biết trước được bao nhiêu phần tử có trong file, dùng push_back tiện thì rất tiện nhưng để ý là khi nó push_back 1 phần tử vào capacity của nó sẽ grow lên gấp 2, gấp 4 khi vector đã bị full nên khi tới tận cùng nếu ta mà thiếu 1 phần tử thì double size của cái size khổng lồ sẽ là rất lớn....nên hoặc là dùng 1 biến count phụ, rồi resize( count ) hoặc là dùng kĩ thuật này :
    - Cái expression : vector< string >( m_lines ) tức là em đang gọi copy construtor của thằng vector< > mà bản sao copy chính là đối tượng m_lines. Mà em nhớ rằng là copy constructor sẽ chỉ tạo 1 đối tượng copy vừa đủ cho đối tượng được copy mà thôi vì vậy capacity của nó sẽ không bị dư. Và
    động tác cuối cùng là ta đổi chỗ nó với cái vector của chúng ta và ta có 1 vector vừa đúng size cần dùng swap( m_lines ) !

    ps : Trả lời cho em về sách STL : Accelerated C++, Effective C++ 2 cuốn này + google là đủ xài !
    Đã được chỉnh sửa lần cuối bởi rox_rook : 23-09-2008 lúc 11:51 PM.

  6. #16
    Ngày gia nhập
    09 2006
    Nơi ở
    /usr/share/.hack@
    Bài viết
    1,433

    Mặc định [2]

    Tiếp nha , mấy bài trên có nhiều lời giải hay lắm ^^!

    Giờ X lại kiếm ra được một cái theo X là cũng hay, xin mời anh em cùng thảo luận nha.

    X code một đoạn thế này

    C++ Code:
    1. #include <iostream>
    2.  
    3. using namespace std;
    4.  
    5. int main(void)
    6. {  
    7.     message() = "xcross87"; // (1)
    8.     cout << message(); // (2)
    9.     return 0;
    10. }

    1. message() là một function
    2. Bài trên sẽ in ra màn hình
    C++ Code:
    1. xcross87
    3. Nếu như bỏ dòng (1) thì kết quả sẽ là
    C++ Code:
    1. default

    Yêu cầu: Viết hàm message() thỏa mãn code ở trên và 3 đặc tính đã nêu.

    Ghi chú: code càng củ chuối càng tốt

    XIN MỜI ANH EM THƯỞNG THỨC !
    None!

  7. #17
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Đây là một đoạn code cực chuối :

    C++ Code:
    1. #include <iostream>
    2.  
    3. using namespace std;
    4.  
    5. char * &message()
    6. {
    7.     static char s[100];
    8.     static char *p = s;
    9.     int i = 0;
    10.  
    11.     s[i++] = 'D';
    12.     s[i++] = 'e';
    13.     s[i++] = 'f';
    14.     s[i++] = 'a';
    15.     s[i++] = 'u';
    16.     s[i++] = 'l';
    17.     s[i++] = 't';
    18.     s[i++] = 0;
    19.  
    20.     return p;
    21. }
    22.  
    23. int main(void)
    24. {  
    25.     message() = "xcross87"; // (1)
    26.     cout << message(); // (2)
    27.     return 0;
    28. }
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  8. #18
    Ngày gia nhập
    09 2008
    Nơi ở
    Kĩ viện
    Bài viết
    169

    C++ Code:
    1. #include <iostream>
    2. #include <conio.h>
    3.  
    4. class CuChuoiObject
    5. {
    6. public:
    7.     CuChuoiObject()
    8.     {
    9.         string = "default";
    10.     }
    11. public:
    12.     char* string;
    13. public:
    14.     void operator =(char* rhs)
    15.     {
    16.         string = rhs;
    17.     }
    18. };
    19.  
    20. void operator <<(std::ostream& Stream, CuChuoiObject& cuchuoi)
    21. {
    22.         Stream << cuchuoi.string;
    23. }
    24.  
    25. CuChuoiObject CuChuoi;
    26.  
    27. CuChuoiObject& message()
    28. {
    29.     return CuChuoi;
    30. }
    31.  
    32. int main()
    33. {
    34.     //message() = "xcross87"; // (1)
    35.     std::cout << message(); // (2)
    36.  
    37.     _getch();
    38.     return 0;
    39. }
    Nộp bài .
    Phá toái hư không - Bạch nhật thăng thiên.

  9. #19
    Ngày gia nhập
    04 2008
    Bài viết
    336

    C++ Code:
    1. string &message()
    2. {
    3.     static string s="default";
    4.     return s;
    5. }

    Cái này giống cách của mèo ^^

    edit:bó tay với CuChuoiObject -.-'
    Đã được chỉnh sửa lần cuối bởi 6220119 : 28-09-2008 lúc 09:05 PM.
    code ra gió bão

  10. #20
    Ngày gia nhập
    09 2008
    Nơi ở
    Kĩ viện
    Bài viết
    169

    Nhưng độ củ chuối làm sao = NVD .
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.
    Phá toái hư không - Bạch nhật thăng thiên.

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

  1. Series video hướng dẫn lập trình .NET(C#) từ A-Z
    Gửi bởi anhnt3 trong diễn đàn Tutorials và Thủ thuật lập trình C#, ASP.NET
    Trả lời: 35
    Bài viết cuối: 16-02-2014, 10:04 AM
  2. Hàng về Sony Vaio SVZ series giá tốt
    Gửi bởi girevn trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 3
    Bài viết cuối: 14-08-2012, 04:03 PM
  3. Vỏ Nokia tháo máy chính hãng E series : E5-00/E7-00/E51/E52/E63/E71/E72/E66/E75/E90..
    Gửi bởi vopinsac trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 04-07-2012, 02:23 PM
  4. Series ảnh Ngọc Trinh từ bé đến lớn
    Gửi bởi vecvn trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 15-05-2012, 10:27 AM
  5. Tủ mạng Rack 19'' Systems 27U - Series 800
    Gửi bởi xilixia trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 22-10-2010, 04: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