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

Đề tài: Cho mình hỏi cách chèn thêm dấu chấm vào chuỗi số

  1. #1
    Ngày gia nhập
    11 2011
    Nơi ở
    Tp HCM
    Bài viết
    2

    Arrow Cho mình hỏi cách chèn thêm dấu chấm vào chuỗi số

    Nhập một chuỗi ký tự toàn là ký tự số. Chèn thêm các dấu chấm vào chuỗi để phân
    biệt hàng trăm, hàng ngàn, hàng triệu, …
    Ví dụ: Nhập “12357929209” Xuất “12.357.929.209”

  2. #2
    Ngày gia nhập
    10 2011
    Bài viết
    552

    Chạy từ đít chuỗi lên đầu.
    Cứ chạy dc 3 bước thì lắp thêm dấu chấm vào(cũng chỉ là chèn 1 phần tử vào mảng)

    Kỹ thuật chèn 1 phần tử vào mảng đã có nhiều. Nếu cần bạn có thể tìm kiếm. Nắm dc kỹ thuật rồi áp dụng vào bài này
    Um Mani Padme Hum...!!

  3. #3
    Ngày gia nhập
    11 2011
    Nơi ở
    /home/tancuong
    Bài viết
    32

    Giải thuật:
    - số chữ số của số nhập vào chia hết cho 3 thì: cứ 3 số thì in một dấu "."
    - số chữ số của số nhập vào không chia hết cho 3 thì: in các ký tự đầu đến khi số chữ số còn lại chia hết cho 3 rồi thực hiện như trên

    C Code:
    1. void out (char *s)
    2. {
    3.     while (*s == '0')
    4.         ++s;
    5.  
    6.     if (strlen(s) % 3)
    7.     {
    8.         for (; strlen(s) % 3; ++s)
    9.         {
    10.             printf("%c", *s);
    11.         }
    12.  
    13.         if (strlen(s))
    14.             printf(".");
    15.     }
    16.  
    17.     for (; *s; s++)
    18.     {
    19.         printf("%c", *s);
    20.         if (strlen(s+1) % 3 == 0)
    21.             printf(".");
    22.     }
    23.     printf("\b \b");
    24. }

  4. #4
    Ngày gia nhập
    10 2011
    Bài viết
    552

    ^ bạn cuong :
    bài này là chèn dấu "." vào chuỗi luôn chứ ko chỉ là in ra đâu ^^ Hihi
    Um Mani Padme Hum...!!

  5. #5
    Ngày gia nhập
    04 2010
    Bài viết
    1,534

    Giải thuật 1:
    Đếm ngược, 3 chữ số thì chèn một dấu chấm -> cách làm rất chính xác, nhưng rất tiếc, chuỗi trong C không theo lô gic toán. Mỗi lần thêm dầu chấm lại phải dời một đống?
    --> cần cải tiến phương pháp để mỗi ký tự chỉ dời 1 lần.

    Giải thuật 2:
    Có thể dùng hàm sprintf để in vào chuỗi thay vì printf in ra console cũng được.
    Tuy nhiên cách tính %3 và in ra rắc rối quá !

    Cải tiến giải thuật 1:
    Cần động não toán số một chút để tìm cách tính số dấu chấm
    Số dấm chấm cần phải thêm vào = soDC = (độ dài chuỗi + 2) / 3 - 1
    Đọc ngược chuỗi: ngừng khi soDC <= 0
    . cứ mỗi chữ số lại dời về sau soDC vị trí
    . cứ dời 3 chữ số thì thêm 1 dấu chấm kế đó và giảm soDC

  6. #6
    Ngày gia nhập
    11 2011
    Nơi ở
    Tp HCM
    Bài viết
    2

    Mặc định Cho mình hỏi cách chèn thêm dấu chấm vào chuỗi số

    Trích dẫn Nguyên bản được gửi bởi nguyen tan cuong Xem bài viết
    Giải thuật:
    - số chữ số của số nhập vào chia hết cho 3 thì: cứ 3 số thì in một dấu "."
    - số chữ số của số nhập vào không chia hết cho 3 thì: in các ký tự đầu đến khi số chữ số còn lại chia hết cho 3 rồi thực hiện như trên

    C Code:
    1. void out (char *s)
    2. {
    3.     while (*s == '0')
    4.         ++s;
    5.  
    6.     if (strlen(s) % 3)
    7.     {
    8.         for (; strlen(s) % 3; ++s)
    9.         {
    10.             printf("%c", *s);
    11.         }
    12.  
    13.         if (strlen(s))
    14.             printf(".");
    15.     }
    16.  
    17.     for (; *s; s++)
    18.     {
    19.         printf("%c", *s);
    20.         if (strlen(s+1) % 3 == 0)
    21.             printf(".");
    22.     }
    23.     printf("\b \b");
    24. }
    cho hỏi *s nghĩa là gì????

  7. #7
    Ngày gia nhập
    10 2011
    Bài viết
    552

    Trích dẫn Nguyên bản được gửi bởi teppei14 Xem bài viết
    cho hỏi *s nghĩa là gì????
    Đọc phần "con trỏ". Đọc ở sách, ngắn gọn dễ hiểu, có thể áp dụng ngay làm bải tập.
    Đọc ở Khu vực này có 1 bài về Bản chất con trỏ . Viết chi tiết, đọc để hiểu thấu đáo hơn vấn đề
    Um Mani Padme Hum...!!

  8. #8
    Ngày gia nhập
    04 2010
    Bài viết
    1,534

    @nguyen tan cuong :
    Đếm thử xem code trên gọi hàm strlen bao nhiêu lần!
    Đáng lẽ phải dùng 1 biến chứa strlen và trừ dần đi theo tuần tự.

  9. #9
    Ngày gia nhập
    11 2011
    Nơi ở
    /home/tancuong
    Bài viết
    32

    Trích dẫn Nguyên bản được gửi bởi VoTichSu Xem bài viết
    @nguyen tan cuong :
    Đếm thử xem code trên gọi hàm strlen bao nhiêu lần!
    Đáng lẽ phải dùng 1 biến chứa strlen và trừ dần đi theo tuần tự.
    Tui có nghĩ tới vấn đề này. Thật ra khi code mã cũng đã làm như bác nói. Đúng là khi gọi strlen thì nó tính nhiều lần thật.

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

    mình có cách giải như sau:
    void Chen(char s[], int vt, char c)
    {
    for (int i = strlen(s) + 1; i > vt; i--)
    s[i] = s[i - 1];
    s[vt] = c;
    }
    void danh_Dau(char s[])
    {
    int i;
    for (i = strlen(s) - 3; i > 0; i = i - 3)
    Chen(s, i, '.');
    puts(s);
    }

    Nhập chuỗi vào hàm main nó sẽ thêm dấu chấm vào thôi

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

  1. Trả lời: 0
    Bài viết cuối: 30-10-2012, 01:19 PM
  2. Lập trình C++ cho mình hỏi hàm thêm 1 kí tự cho một chuỗi sai ở đâu vậy các bạn
    Gửi bởi thienthanoze trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 29-09-2012, 06:27 PM
  3. Thêm một chuỗi cố định và highlight vào richtextbox!
    Gửi bởi markpq trong diễn đàn Tutorials và Thủ thuật lập trình C#, ASP.NET
    Trả lời: 0
    Bài viết cuối: 10-09-2012, 04:35 PM
  4. Thêm sự kiện khi Click Phải Chuột???
    Gửi bởi nam_dkn trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 14
    Bài viết cuối: 31-03-2009, 10:22 AM
  5. Đảo các từ trong chuỗi | em muốn viết thêm hàm này
    Gửi bởi bethaophuong2004 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 27-03-2009, 01:08 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