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

Đề tài: Làm thế nào để giới hạn được số kí tự nhập vào trong chuỗi

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

    Mặc định Làm thế nào để giới hạn được số kí tự nhập vào trong chuỗi

    Em đang làm bài về chuỗi...nhưng em không biết làm thế nào để giới hạn được số kí tự nhập vào chuỗi! Nên chuỗi của em có thể nhập dài dằng dặc vẫn được và khi quá số lượng phần tử kí tự trong chuỗi được cấp phát thì tất nhiên sẽ xảy ra lôi! Em muốn biết làm thế nào để mình giới hạn được số kĩ tự được nhập vào chuỗi và chống nhập kí tự lạ(*,?,!...)! Anh chị có thể gợi mở cho em phần này được không ạ

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

    Theo mình biết thì nếu dùng các hàm nhập chuẩn của C thì nó chỉ dừng khi mình nhất Enter, chứ không giới hạn ký tự được.

    Cách làm của mình thế này, kiểm soát các ký tự & số lượng ký tự nhập vào bằng Mã ASCII.

    Nếu mã ASCII nằm trong các ký tự mình cho phép thì lấy, không thì bỏ qua, và lặp lại cho đến khi nào nhập đủ thì thôi.

    Để lấy mã ASCII của 1 phím nhập vào thì mình dùng hàm getch (trong thư viện conio.h)

    Ví dụ

    C++ Code:
    1. int n;
    2. n=getch();
    3.  
    4. // Nếu nhập chữ A thì khi đó n=65, vì mã ASCII của chữ A là 65

    Ví dụ hàm nhập chuỗi của mình là char* NhapChuoi (const int k), trong đó k là số ký tự tối đa cho phép nhập.

    Đầu tiên ta tạo & cấp phát bộ nhớ cho 1 mảng kiểu char gồm k+1 ký tự (để lưu thêm ký tự NULL kết thúc chuỗi nữa)

    Để biết hiện tại chuỗi có bao nhiêu ký tự, ta khai báo biến index, ban đầu index=0.
    Khai báo thêm biến n dùng để lấy mã ASCII của bàn phím.

    Trong hàm ta làm những việc như sau.

    • Nếu nhấn 1 ký tự hợp lệ: Thì lưu nó vào chuỗi, biến index tăng lên và xuất ký tự đó ra màn hình.
    • Nếu nhấn phím BackSpace: Thì xóa 1 ký tự ở cuối chuỗi, index giảm, xóa 1 ký tự trên màn hình
    • Nếu nhấn phím Enter mà index=0 (nghĩa là chưa nhâp gì mà đã nhấn enter) thì cho quay lại từ đầu



    Mã nguồn thế này: Nhớ khai báo thư viện conio.h


    C++ Code:
    1. char* NhapChuoi (const int k)
    2. {
    3.     char *kq=new char[k+1];     // tạo mảng
    4.     int n,index=0;
    5.     do
    6.     {
    7.         loop:;
    8.         n=getch();      // lay ma ASCII
    9.         if (  ( (n>='0' && n<='9') || (n>='A' && n<='Z') || (n>='a' && n<='z')  || n==' ' || n=='.'  ) &&  index<k)     // Neu thuoc 0-9, A-Z, a-z hoặc dấu . hoặc khoảng trắng && chuỗi đang có ít hơn k ký tự thì cho phép
    10.         {
    11.             cout <<char(n);     // xuất ký tự đó ra màn hình
    12.             kq[index++]=n;      // Lưu vào mảng
    13.         }
    14.         else if (n=='\b' && index>0)    // Nếu nhấn dấu BackSpace mà chuỗi không rỗng
    15.         {
    16.             cout <<"\b \b";     // Xóa 1 ký tự trên màn hình
    17.             kq[--index]=0;      // Xóa 1 ký tự trong chuỗi kq
    18.         }
    19.         if (n==13 && index==0) goto loop;       // Nếu nhấn Enter mà chưa nhập gì thì k cho phép
    20.     }
    21.     while (n!=13);       // Cứ lặp lại trong khi chưa nhập Enter
    22.  
    23.     kq[index]=0;    // Kết thúc chuỗi
    24.     return kq;
    25.  
    26. }

  3. #3
    Ngày gia nhập
    12 2010
    Nơi ở
    Cần thơ
    Bài viết
    273

    Tớ nhớ hình như hàm scanf giới hạn được mà nhỉ
    C Code:
    1. #include <stdio.h>
    2. char s[100];
    3. scanf("%5s",&s);//s sẽ lấy tối đa là 5 kí tự
    Ai bất tài, tôi nhìn hoài chẳng thấy,
    Đi khắp phòng tôi lấy 1 tấm gương,
    Khẽ đặt lên một góc phía bức tường,
    Nhìn vào đó, tôi tận tường kẻ đó.

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

    Trích dẫn Nguyên bản được gửi bởi azurelonely Xem bài viết
    Tớ nhớ hình như hàm scanf giới hạn được mà nhỉ
    C Code:
    1. #include <stdio.h>
    2. char s[100];
    3. scanf("%5s",&s);//s sẽ lấy tối đa là 5 kí tự
    đúng rồi, cách này thì nó lấy tối đa 5 ký tự, tuy nhiên lúc mình nhập, nhập cả trăm ký tự vẫn được, khi nào nhập enter thì nó mới nhưng hàm và lấy 5 ký tự đầu tiên.

    Còn cách trên của mình, khi nhập quá số ký tự cho phép thì trên mành hình cũng không xuất hiện gì hết

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

    Cám ơn anh...^^Cách này có sử dụng tốt với việc đọc các từ cố định từ các tệp tin ra đựoc không hả anh...

  6. #6
    Ngày gia nhập
    03 2011
    Bài viết
    65

    Mặc định Làm thế nào để giới hạn được số kí tự nhập vào trong chuỗi

    Trích dẫn Nguyên bản được gửi bởi kuhoang0512 Xem bài viết
    Cám ơn anh...^^Cách này có sử dụng tốt với việc đọc các từ cố định từ các tệp tin ra đựoc không hả anh...
    Cái này chĩ dùng để nhập chuỗi từ bàn phìm thôi bạn à

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

  1. Cách nhập xuất chuỗi (hoặc kí tự) trong C++ như thế nào?
    Gửi bởi Fredy 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: 07-12-2012, 02:42 PM
  2. Trả lời: 1
    Bài viết cuối: 29-06-2011, 12:02 AM
  3. Lập trình C++ Nhập và xuất mảng chuỗi trong C++ như thế nào?
    Gửi bởi qqqq1234 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 10
    Bài viết cuối: 18-01-2011, 08:46 PM
  4. Kỹ thuật C++ Các quy tắc nhập chuỗi trong C++, làm thế nào để nhập chuỗi có khoảng trắng?
    Gửi bởi quyen1991 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: 20-11-2010, 03:36 PM
  5. Nhập chuỗi, đếm số lần xuất hiện các từ trong chuỗi như thế nào?
    Gửi bởi VizDee trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 7
    Bài viết cuối: 23-01-2010, 01:33 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