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ố 14 kết quả

Đề tài: Hiệu chỉnh file văn bản

  1. #1
    Ngày gia nhập
    01 2009
    Bài viết
    1

    Unhappy Hiệu chỉnh file văn bản

    các anh chị ơi giúp em với
    em có bài tập C vè hiệu chỉnh file văn bản như sau
    Trươc các dấu ",",".","!",":",";","?" không được có kí tự trắng
    Sau các dấu đó có đúng 1 kí tự trắng
    Chữ đầu tiên sau các dấu ".","!","?" phai được viết hoa
    các anh chị giúp em với em không rành về lập trình lắm vì em trọn sai ngành cho em xin thuật giải và code cua chtrinh đó nha nếu anh chị có thể
    Cám ơn anh chị nhiều lắm lắm

  2. #2
    Ngày gia nhập
    10 2008
    Nơi ở
    07T1 - DUT
    Bài viết
    101

    Sao lại bi quan thế! Ngành này cũng vui lắm chứ bạn!
    Theo mình thì bạn nên tạo một tệp văn bản mới. Sau đó duyệt từ đầu đến cuối tệp văn bản cũ.Ghi từng kí tự của tệp cũ sang tệp mới.Kí tự được ghi vào tệp mới nếu thỏa các điều kiện sau: Nếu gặp kí tự trắng thì xét kí tự tiếp theo,nếu là ",",".","!",":",";","?" thì không ghi kí tự trắng này mà xét kí tự kế tiếp.Nếu gặp kí tự ",",".","!",":",";","?" thì ghi kí tự này và 1 kí tự trắng chỉ ghi tiếp khi nào gặp kí tự khác kí tự trắng! Mình chỉ nghĩ được vậy bạn thử xem! Bài này mình thấy cũng hay.Không biết có cao thủ nào có cách hay hơn xin chỉ giáo!
    Đã được chỉnh sửa lần cuối bởi hoangsan_c : 08-02-2009 lúc 07:45 PM.

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

    Cám ơn bank đã chỉ cho mình
    mình cũng nghĩ như thế nhưng các thuật toán thì mình không rành lắm
    rắc rối là ở đó cơ
    hi vọng các cao thủ làng CViet có thể góp ý

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

    Thường thì thuật toán càng "đè máy ra chạy" nhiều thì thuật toán ấy càng đơn giản với người lập trình. Mình xin góp ý cho bạn về một thuật toán kiều như vậy. Thuật toán này cần 2 lần duyệt file và 2 file tạm.

    - Lần duyệt thứ 1 là để loại bỏ ký tự khoảng trắng "rác". Bạn duyệt từng ký tự của file. Nếu gặp ký tự khoảng trắng thì xét xem trước nó có phải là khoảng trắng ko, nếu ko thì mới ghi xuống file tạm. Những ký tự khác thì bạn ghi xuống file tạm như bình thường.

    - Lần duyệt thứ 2 bạn cũng duyệt từng ký tự của file. Nếu gặp ký tự khoảng trắng thì xét xem phía sau nó có phải là ";,?!..." , nếu ko thì mới ghi xuống ký tự khoảng trắng file tạm. Nếu gặp ";,?!..." thì xét xem sau nó có phải là khoảng trắng hay ko, nếu ko thì ghi thêm 1 khoảng trắng xuống file, sau đó chuyển ký tự tiếp theo thành hoa.

    Bạn có thể dùng buffer thay cho file tạm để chạy nhanh hơn.
    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.

  5. #5
    Ngày gia nhập
    11 2007
    Nơi ở
    Hà Nội
    Bài viết
    520

    Mình gợi ý cho bạn thuật toán sau , mình áp dụng , sẽ có code luôn cho bạn nhưng bạn tự làm trước thì hay hơn.Nếu thuật toán còn thiếu sót thì bạn chỉ ra cho mình nhé

    khởi tao int d=0;
    +duyệt qua các kí tự space ở đầu cho tới khi không gặp kí tự này nữa
    kí tự khác space ngay sau ta ghi vào file đich và là kí tự hoa
    +duyệt tiếp file nguồn vào biến a cho đến khi gặp kí tự space ,ta có các trường hợp:
    {- đọc file nguồn tiếp vào b: nếu gặp space thì a=b; quay lại bước trên
    -nếu gặp : , ; thì ghi vào file đich các kí tự này
    -nếu gặp . ! ? thì ghi vào file đich các kí tự này , ghi thêm kí tự space ,biêns d =1;
    còn lại ta kiểm tra tình trạng d, d=1--> ghi hoa
    }

    nếu không phải space --> ghi vào file đich(có kiểm tra biến d)
    sau đây là code
    C Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3. #include<stdlib.h>
    4. #include<ctype.h>
    5.  
    6. main()
    7. {FILE *f1,*f2;
    8. char fin[100],fout[100],a,b;
    9. int d=0;
    10.  
    11. printf("Nhap duong dan file van ban nguon : ");
    12. fflush(stdin);
    13. gets(fin);
    14. f1=fopen(fin,"r");
    15. if(f1==NULL){printf("Khong tim thay file."); exit(0);}
    16.  
    17. printf("Nhap duong dan file van ban dich: ");
    18. fflush(stdin);
    19. gets(fout);
    20. f2=fopen(fout,"w");
    21. if(f2!=NULL)
    22.     {
    23.      while((a=getc(f1))!=EOF)
    24.          if(a!=' ') break;
    25.     putc(toupper(a),f2);
    26.     while((a=getc(f1))!=EOF)
    27.      {nhan1:
    28.            if(a==' ')
    29.            {
    30.  
    31.             if((b=getc(f1))!=EOF)
    32.             if(b==' '){a=b;goto nhan1;}
    33.             else
    34.             switch(b)
    35.             {
    36.             case ',':
    37.             case ':':
    38.             case ';':putc(b,f2);break;
    39.             case '.':
    40.             case '!':
    41.             case '?':d=1;putc(b,f2);putc(' ',f2);break;
    42.             default: putc(a,f2);
    43.             if(d&&(isalpha(b))){putc(toupper(b),f2);d=0;}else putc(b,f2);
    44.             }
    45.            }
    46.        else if((a=='.')||(a=='!')||(a=='?'))
    47.             {
    48.             putc(a,f2);
    49.             putc(' ',f2);
    50.             d=1;
    51.             }
    52.         else {if(d&&isalpha(a)){putc(toupper(a),f2);d=0;}else putc(a,f2);}
    53.     }
    54. fclose(f1);
    55. fclose(f2);
    56. }
    57. }

  6. #6
    Ngày gia nhập
    01 2009
    Bài viết
    1

    Mặc định Hiệu chỉnh file văn bản

    cám ơn bạn đã bày cách cho mình
    theo cách của bạn thì lần duyệt thứ 2 phải là gặp khoảng trắng thì xét xem đằng trước nó có phải là các dấu không chứ
    răc rối là ở đây mình không rành về lập trình lăm nên chẳng biết khai báo các dấu ";,?,,,"như thế nào cả
    ai có cách làm dễ hiểu hơn chỉ dùm mình nha mình không rành lắm mà

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

    cám ơn bạn nhiều nha quangnh89 mình đã viết chtrinh nhưng mắc ở khi khai báo các kí tự dấu có cách khác chỉ cần khai báo 1 lần các kí tự đó không?
    Dù sao cũng rất cám ơn bạn đã góp ý cho mình mình sẽ test và trả lời bạn sau

  8. #8
    Ngày gia nhập
    11 2007
    Nơi ở
    Hà Nội
    Bài viết
    520

    Trích dẫn Nguyên bản được gửi bởi bonggon Xem bài viết
    cám ơn bạn nhiều nha quangnh89 mình đã viết chtrinh nhưng mắc ở khi khai báo các kí tự dấu có cách khác chỉ cần khai báo 1 lần các kí tự đó không?
    Dù sao cũng rất cám ơn bạn đã góp ý cho mình mình sẽ test và trả lời bạn sau
    mình không hiểu câu hỏi lắm

  9. #9
    Ngày gia nhập
    01 2009
    Bài viết
    1

    y minh là có cách nào mà khai bao cac dấu kí tự một lần thôi không? như kiểu gắn các kí tư đó vào 1 mảng rồi khai báo có phải đỡ công khai báo nhiều lần không

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

    Cách nào cũng được cả mà, làm mảng thì code ít nhưng tư duy mệt hơn một tí.
    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.

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

  1. Loại bỏ text trùng nhau từ một file text(.txt) - File văn bản
    Gửi bởi bossnabito trong diễn đàn Thắc mắc chung
    Trả lời: 7
    Bài viết cuối: 31-07-2011, 03:34 AM
  2. làm sao để đọc văn bản từ file .txt trong c++ sang một file tạo bằng thư viện include <map>
    Gửi bởi biencute 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: 23-06-2011, 04:12 PM
  3. Lỗi do đọc file văn bản quá lớn?
    Gửi bởi tungcheng trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 5
    Bài viết cuối: 22-05-2011, 11:13 PM
  4. Bài tập C đếm số đoạn văn, số từ của văn bản trong file
    Gửi bởi kem92 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 21-05-2011, 09:22 PM
  5. viết ứng dụng đọc file pdf và các file văn bản bằng C#?
    Gửi bởi Mr KOP trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 09-04-2010, 10:39 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