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

Đề tài: Hàm "strstr()" có tác dụng gì?

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

    Mặc định Hàm "strstr()" có tác dụng gì?

    Ai biết chỉ giùm em với . Em đang học lập trình C em thấy ở phần chuỗi có hàm "strstr()" dùng để tìm kiếm nội dung của chuỗi .

    C Code:
    1. #include<conio.h>
    2. #include<stdio.h>
    3. #include<string.h>
    4.  
    5. main()
    6. {
    7.     char chuoi[100],*s;
    8.     printf("\nNhap vao mot chuoi ");
    9.     gets(chuoi);
    10.     s=strstr(chuoi,"anh");
    11.     printf("\n%s",s);
    12.     getch();
    13.  
    14. }

    giả sử ta nhập vào một chuỗi sau " chúng tôi tranh nhau đến ăn quà mà anh gửi cho "
    chương trình sẽ cho kết quả sau :
    " anh tranh nhau den an qua ma anh gui cho "
    có ai có thể giúp mình làm sao để khi tìm kiếm trong chuỗi đó nó sẽ đưa ra kết quả là tìm thấy 1 từ có nghĩa chứ không hẳn là tìm thấy cụm từ giống từ khóa được không ?

    Cảm ơn nhiều !

    Plez đưa thẻ code vào code nhé ! Thx
    Đã được chỉnh sửa lần cuối bởi comeonbaby : 23-03-2008 lúc 05:47 PM.

  2. #2
    Ngày gia nhập
    11 2007
    Bài viết
    153

    Hàm strstr(s1,s2) trả về một con trỏ trỏ đến chỗ bắt đầu thấy s2 trong s1 . Vì thế ví dụ minh hoạ của bạn là hoàn toàn chính xác . Bởi đây là một hàm chuẩn của C nên bạn ko thể sửa đổi cái cách tìm kiếm của nó được , muốn theo ý bạn thì bắt buộc bạn phải viết hàm khác thui .

    THeo như ý bạn muốn thì nếu ta nhập vào : chúng tôi tranh nhau đến ăn quà mà anh gửi cho

    Thì kết quả trả về ko phải là :anh tranh nhau đến ăn quà mà anh gửi cho

    Mà là : anh gửi cho .

    Như vậy bạn cần phải làm sao đó cho hàm của bạn biết được đâu là một từ "anh" chính xác . CHứ ko phải là từ "anh" trong từ "tranh"

    Thế thì bạn suy nghĩ như sau : thế nào là một từ riêng biệt ? Vị trí của nó ở đầu chuỗi , giữa chuỗi hay cuối chuỗi khác nhau như thế nào ?
    CHỉ cần bạn nghĩ ra được tất cả các trường hợp này , viết code sử dụng câu lệnh if là xong thôi . Ráng lên bạn nhé . Thử suy nghĩ và thực hiện . 1% làm ra cũng lả đáng quý .
    ttecak ?

  3. #3
    Ngày gia nhập
    02 2008
    Bài viết
    88

    Theo mình thì như thế này. chỉ cần kiểm tra ký tự trước từ đó có phải là khoảng trăng hay ko (đối với trường hợp từ kiểm tra không phải nằm ở đầu).
    Mình từ Caulacbovb qua)
    Giã từ VB6 đến với VB.Net, C# và Java.

  4. #4
    Ngày gia nhập
    11 2007
    Bài viết
    153

    thế à ? chỉ cần kiểm tra xem trước từ ấy có phải là khoảng trắng ko à ? thế thì từ này là sao nhỉ : " abcd wert anhvb" ?
    ttecak ?

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

    giả sử ta nhập vào một chuỗi sau " chúng tôi tranh nhau đến ăn quà mà anh gửi cho "
    chương trình sẽ cho kết quả sau :
    " anh tranh nhau den an qua ma anh gui cho "
    có ai có thể giúp mình làm sao để khi tìm kiếm trong chuỗi đó nó sẽ đưa ra kết quả là tìm thấy 1 từ có nghĩa chứ không hẳn là tìm thấy cụm từ giống từ khóa được không ?
    Cậu đưa thêm vài ví dụ được không ? Tui vẫn chưa hiểu ý cậu lắm, đưa ra 1 từ có ý nghĩa theo qui tắc nào ?

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

    Mặc định Hàm "strstr()" có tác dụng gì?

    Kết quả in ra là : anh nhau den an qua ma anh gui cho

  7. #7
    Ngày gia nhập
    05 2010
    Nơi ở
    Cách Mạng Tháng 8
    Bài viết
    205


    Quả thực nhìn cái input với output tôi cũng chả hiểu ra sao.
    Như thế tức là thay "chúng tôi" bằng "anh", phải không ?
    Nothing last forever !!

  8. #8
    Ngày gia nhập
    09 2008
    Bài viết
    1

    int dem( char *s1 , char *s2)
    {
    int dem=0,l=strlen(s2);
    char *p= strstr(s1,s2)
    while(p!=NULL)
    {
    dem++;
    p=strstr(p+l,s2);}
    return dem;
    }

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

    Tìm chữ "anh" trong
    " chúng tôi tranh nhau đến ăn quà mà anh gửi cho "
    Nhưng không muốn lấy chữ tranh

    Cách làm căn bản là đầu tiên phải có hàm xác định như thế nào là một chữ - phân biệt với một phần chữ. Điếu kiện này đại khái là "trước ký tự 'a' phải là một ký tự khác 'a-z,A-Z,0-9' và sau 'h' cũng vậy"

    Sau đó dùng strstr()n để mò từ từ cho đến lúc thỏa mãn điều kiện.

    Cách dễ hơn hết là dùng thư viện Regular Expression của trình dịch. Nếu trình dịch không có regex thì chịu thua! Tuy nhiên, regex là thủ thuật ở trình độ cao. Nếu bạn biết regex thì đã không hỏi câu hỏi này.

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

  1. nghĩa của 3 từ "principals", "artifacts", "securables" là như thế nào?
    Gửi bởi ntbao trong diễn đàn English for IT | Tiếng anh cho dân CNTT
    Trả lời: 2
    Bài viết cuối: 02-09-2017, 06:36 PM
  2. Lỗi"error C2275: 'T' : illegal use of this type as an expression" khi dùng "list<T>::iterator it"
    Gửi bởi doicanhden trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 6
    Bài viết cuối: 19-01-2012, 01:59 AM
  3. Trả lời: 1
    Bài viết cuối: 01-12-2011, 07:32 PM
  4. Trả lời: 4
    Bài viết cuối: 14-09-2011, 11:01 PM
  5. Problems : " recover tree " with input as " preorder" and "inorder"
    Gửi bởi HoangManhHa1991 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 16
    Bài viết cuối: 13-04-2011, 10:19 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