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

Đề tài: Hàm viết hoa chữ cái đầu câu. Chỉ chạy được khi file input ngắn!

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

    Angry Hàm viết hoa chữ cái đầu câu. Chỉ chạy được khi file input ngắn!

    Cả nhà ơi góp ý giùm em đoạn code này nha!
    Hàm viết hoa chữ cái đầu câu. Ví dụ:
    ". hôm nay trời đẹp" chuyển thành: ". Hôm nay trời đẹp"
    Đây là đoạn code của em:
    Code:
    void upper()
    {
        FILE* fin = fopen("Input.txt", "r");
        FILE* fout = fopen("Output.txt", "w");
        char word[WMAXLEN] = "";
        char ch;
        int len = 0;
    
        while(!feof(fin))
        {
            ch = fgetc(fin);
            if (ch == EOF)
                break;
            else
            {
                word[len] = ch;
                len++;
            }
        }
        for (int i = 0; word[i] != '\0'; i++)
        {
            if (word[i] == '.' || word[i] == '?' || word[i] == '!')
            {
                word[i+2] = toupper(word[i+2]);
            }
            fputc(word[i], fout);
        }
        fcloseall();
    }
    Nếu đoạn văn chỉ 3-4 câu thì chạy ngon lành, còn nhiều hơn thì chương trình báo lỗi!
    Mong cả nhà chỉ giáo!
    Mà em thấy thuật toán của em còn khá chậm! Nếu có thuật toán nào cải tiến hơn mong mọi người chỉ giáo cho em ạ!
    Cảm ơn cả nhà!

  2. #2
    Ngày gia nhập
    04 2010
    Nơi ở
    Binh Thanh, Hồ Chí Minh, Vietnam, Vietnam
    Bài viết
    504

    Chạy thử code này xem, đảm bảo nhanh hơn nhiều, vừa đọc vừa xử lý, vừa ghi ra luôn.
    P/s: Mới re-code từ code của bạn, chưa chạy thử, bạn chạy xong thì comment lại nhé.
    P/s 2: Hôm nay, chỗ tôi trời mưa.
    C Code:
    1. void upper()
    2. {
    3.     FILE* fin = fopen("Input.txt", "r");
    4.     FILE* fout = fopen("Output.txt", "w");
    5.  
    6.     while(!feof(fin))
    7.     {
    8.         char ch = fgetc(fin);
    9.         if (ch == EOF)
    10.             break;
    11.  
    12.         if (ch == '.' || ch == '?' || ch == '!')
    13.         {
    14.             fputc(ch, fout);
    15.             do
    16.             {
    17.                 ch = fgetc(fin);
    18.             }
    19.             while (ch == ' ');
    20.  
    21.             if(ch == EOF)
    22.                 break;
    23.             fputc(' ', fout);
    24.             ch = toupper(ch);
    25.         }
    26.         fputc(ch, fout);
    27.     }
    28.     fcloseall();
    29. }
    Đã được chỉnh sửa lần cuối bởi doicanhden : 05-05-2012 lúc 05:16 PM.
    Kết bạn với tôi <3
    Skype: giautm
    Facebook:
    https://fb.com/giautm.duongntt
    Email:
    giau.tmg@gmail.com

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

    Em mới chạy thử code của bác!
    Viết hoa được chữ cái đầu câu nhưng lại xóa mất tiêu mấy dấu (.), (!), và khoảng trắng sau đó bác ơi!
    Mong bác chỉ giáo!
    Cảm ơn bác nha!

  4. #4
    Ngày gia nhập
    04 2010
    Nơi ở
    Binh Thanh, Hồ Chí Minh, Vietnam, Vietnam
    Bài viết
    504

    Trích dẫn Nguyên bản được gửi bởi ngocnghech Xem bài viết
    Em mới chạy thử code của bác!
    Viết hoa được chữ cái đầu câu nhưng lại xóa mất tiêu mấy dấu (.), (!), và khoảng trắng sau đó bác ơi!
    Mong bác chỉ giáo!
    Cảm ơn bác nha!
    Sorry quên fputc cái dấu câu vào. Code tôi sửa lại ở trên. Mấy khoảng trẳng thừa thì bỏ nó lun.
    VD:"aaaaaaaaaa. bbbbbbb" -> "aaaaaaaaaa. Bbbbbbb"
    Èo, quên mất bạn viết hoa dòng đầu tiên luôn đi.
    Kết bạn với tôi <3
    Skype: giautm
    Facebook:
    https://fb.com/giautm.duongntt
    Email:
    giau.tmg@gmail.com

  5. #5
    Ngày gia nhập
    04 2012
    Nơi ở
    Bình Định (Đang học ở tphcm)
    Bài viết
    35

    void Upper()
    {
    FILE* f = fopen("input.txt","r");//khong xu ly truong hop flie rong.
    if(!f)return;
    FILE* o = fopen("out.txt","w");
    char s[100];
    while(!feof(f))
    {
    char kt;
    fscanf(f,"%s",s);
    fscanf(f,"%c",&kt);
    if(s[0]>='a'&&s[0]<='z')
    s[0] += 'A'-'a';
    fprintf(o,"%s%c",s,kt);
    while(!feof(f))
    {
    fscanf(f,"%s",s);
    fscanf(f,"%c",&kt);
    fprintf(o,"%s%c",s,kt);
    if(s[strlen(s)-1]=='.'||s[strlen(s)-1]=='?'||s[strlen(s)-1]=='!')
    break;
    }
    }
    }
    Đã được chỉnh sửa lần cuối bởi thai_thinh : 05-05-2012 lúc 09:04 PM.

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

  1. Lập trình C Viết chương trình đọc nội dung file input chứa n phần tử phân số
    Gửi bởi badboykb trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 5
    Bài viết cuối: 04-06-2013, 12:23 AM
  2. làm sao để upload file = <input type="file....
    Gửi bởi pvtam2a trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 16
    Bài viết cuối: 14-06-2012, 01:10 AM
  3. viết chương trình ghi n số nguyên ngẫu nhiên vào file
    Gửi bởi tinhpham trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 6
    Bài viết cuối: 04-05-2012, 08:38 AM
  4. Lập trình C++ Sau khi chạy không thấy file input.dat và output.dat đâu?
    Gửi bởi programmingvietnam trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 6
    Bài viết cuối: 19-04-2011, 11:28 PM
  5. Bài tập C++ Viết chuơng trình sinh ra 10 file dữ liệu ngẫu nhiên
    Gửi bởi cr9 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: 12-03-2011, 10:52 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