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: cách tìm tên trong họ tên dùng hàm strstr được không?

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

    Mặc định cách tìm tên trong họ tên dùng hàm strstr được không?

    Đề bài của mình là tìm kiếm tên sinh viên nhưng khi nhập tên sẽ in ra họ tên của tất cả sinh viên có tên được nhập vào.
    Ví dụ:
    Nhập: Anh
    In ra: Trần Thị Minh Anh
    Dùng hàm strstr nữa. Mọi người giải thích cho mình hiểu được không? Mình thực sự k hiểu chỗ dùng hàm đó và có cần tách tên hay không?
    Đây là struct của mình
    struct sinhvien
    {
    char hoten[50];
    char tenlop[5];
    };
    Đã được chỉnh sửa lần cuối bởi muadaumua000 : 10-12-2012 lúc 01:40 AM. Lý do: sai vấn đề

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

    Bạn xem vi dụ ở đây : http://www.cplusplus.com/reference/cstring/strstr/
    Rất mong được mọi người giúp đỡ :

    Kiến thức mình biết chỉ là hạt cát trên sa mạc

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

    Thanks bạn, nhưng mình chưa hiểu làm sao khi mình nhập tên mà phai in ra ca họ và tên luôn, trong khi hàm strstr lại như thế này
    C Code:
    1. /* strstr example */
    2. #include <stdio.h>
    3. #include <string.h>
    4.  
    5. int main ()
    6. {
    7.   char str[] ="This is a simple string";
    8.   char * pch;
    9.   pch = strstr (str,"simple");
    10.   strncpy (pch,"sample",6);
    11.   puts (str);
    12.   return 0;
    13. }
    nó thay đổi chuỗi mà
    Đã được chỉnh sửa lần cuối bởi langman : 11-12-2012 lúc 11:12 AM.

  4. #4
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,007

    Trích dẫn Nguyên bản được gửi bởi muadaumua000 Xem bài viết
    Thanks bạn, nhưng mình chưa hiểu làm sao khi mình nhập tên mà phai in ra ca họ và tên luôn, trong khi hàm strstr lại như thế này
    C Code:
    1. /* strstr example */
    2. #include <stdio.h>
    3. #include <string.h>
    4.  
    5. int main ()
    6. {
    7.   char str[] ="This is a simple string";
    8.   char * pch;
    9.   pch = strstr (str,"simple");
    10.   strncpy (pch,"sample",6);
    11.   puts (str);
    12.   return 0;
    13. }
    nó thay đổi chuỗi mà
    strncpy (pch,"sample",6);<<<< dòng code này làm thay đổi chuỗi bạn à
    ^_,^

    Facebook : https://www.facebook.com/langmaninternet

    Bùi Tấn Quang

  5. #5
    Ngày gia nhập
    12 2012
    Bài viết
    5

    vậy mình muốn in ra họ tên thì phải làm sao?

  6. #6
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,007

    Mặc định cách tìm tên trong họ tên dùng hàm strstr được không?

    Trích dẫn Nguyên bản được gửi bởi muadaumua000 Xem bài viết
    vậy mình muốn in ra họ tên thì phải làm sao?
    post code hiện tại đang có lên mình edit cho
    ^_,^

    Facebook : https://www.facebook.com/langmaninternet

    Bùi Tấn Quang

  7. #7
    Ngày gia nhập
    12 2012
    Bài viết
    5

    C Code:
    1. #include<iostream.h>
    2. #include<conio.h>
    3. #include<stdio.h>
    4. #include<string.h>
    5. #include<stdlib.h>
    6. struct sinhvien
    7. {
    8. char hoten[50];
    9. char  tenlop[5];
    10. };
    11. int n;
    12. void nhapdssv(sinhvien sv[],int &n)
    13. {
    14. cout<<"------------------------------";
    15. cout<<"\nNhap so luong sinh vien:";
    16. cin>>n;
    17. cout<<"------------------------------";
    18. char a;
    19. for(int i=1;i<=n;i++)
    20. {
    21. cout<<"\nsinh vien thu:"<<i<<"\n";
    22. cout<<"\nnhap ho ten:";
    23. gets(sv[i].hoten);
    24. fflush(stdin);
    25. cout<<"\nnhap ten lop:\n";
    26. gets(sv[i].tenlop);
    27. fflush(stdin);
    28. }
    29. }
    30. void sapxepten(sinhvien sv[],int l,int r)
    31. {
    32.   int i=l,j=r;
    33.   int x=(l+r)/2;
    34.   while(i<=j){
    35.    while(strcmp(sv[i].hoten,sv[x].hoten)<0)i++;
    36.    while(strcmp(sv[j].hoten,sv[x].hoten)>0)j--;
    37.    if(i<=j)
    38.    {
    39.      sinhvien tam = sv[i];
    40.      sv[i] = sv[j];
    41.      sv[j] = tam;
    42.  
    43.     i++;
    44.     j--;
    45.    }
    46.    sapxepten(sv,i,l);
    47.    sapxepten(sv,r,j);
    48.   }
    49. }
    50.  
    51. void indssv(sinhvien sv[],int n)
    52. {
    53. for(int i=1;i<=n;i++)
    54. {
    55. char a;
    56. cout<<"\nsinh vien thu:"<<i<<"\n";
    57. cout<<"\nHo ten :";
    58. cout<<sv[i].hoten;//<<sv[i].ten;
    59. cout<<"\nTen lop:"<<sv[i].tenlop<<"\n";
    60. }
    61. }
    62. int timkiem(sinhvien sv[])
    63. {
    64.  char x[255];
    65.  for(int i=1;i<=n;i++)
    66.  {
    67.    char *p=strstr(sv[i].hoten,x);
    68.    if(p!=NULL)
    69.    {
    70.     return strlen(sv[i].hoten)-strlen(p);
    71.    }
    72.    else
    73.     return -1;
    74.  }
    75. }
    76. void main()
    77. {
    78. clrscr();
    79. sinhvien sv[100];
    80. int x;
    81. nhapdssv(sv,n);
    82. cout<<"\n----------------------------";
    83. cout<<"\nDanh sach sinh vien nhap vao:";
    84. cout<<"\n----------------------------";
    85. indssv(sv,n);
    86. cout<<"\n----------------------------";
    87. cout<<"\nDanh sach sinh vien sau khi sap xep theo ho:";
    88. cout<<"\n----------------------------";
    89. sapxepten(sv,1,n);
    90. indssv(sv,n);
    91. cout<<"\nnhap ten sinh vien can tim:";
    92. cin>>x;
    93. cout<<"\nHo ten sinh vien can tim:";
    94. int tk=timkiem(sv);
    95. cout<<tk;
    96. getch();
    97. }
    98. Đây là toàn bộ bài làm của mình,bạn xem hộ
    Đã được chỉnh sửa lần cuối bởi langman : 13-12-2012 lúc 04:25 PM.

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

    Bạn cho code vào tag đi nhìn thế này oải quá http://diendan.congdongcviet.com/showthread.php?t=6131 . mà hàm nhapdssv khai báo char a; làm gì thế vòng for chạy từ 1 lãng phí một cấu trúc sv[0] 55bytes rồi. mà hàm nhapdssv chống hiện tượng trôi do dấu '\n' trong bộ nhớ đệm toàn là sau khi nhập(fflush(stdin) thế này vô tác dụng bạn đặt lại đi mà để ít dòng xuống dòng tính toán chút để tràn lan là lại sai đó, để mình copy về máy xem tiếp thế nào.
    Mình vừa sửa lại một chút bạn nên dùng phần mềm code nó mới một chút sẽ hay hơn.
    C++ Code:
    1. #include<iostream>
    2. #include<string.h>
    3. using namespace std;
    4. struct sinhvien
    5. {
    6.    char hoten[50];
    7.    char tenlop[5];
    8. };
    9.  
    10. int n;
    11. //Nhap danh sach
    12. void nhapdssv(sinhvien sv[],int &n)
    13. {
    14.   cout<<"------------------------------";
    15.   cout<<"\nNhap so luong sinh vien:";
    16.   cin>>n;
    17.   cout<<"------------------------------";
    18.  //char a; thua cho nay
    19.   for(int i=0;i<n;i++)//nen dat i tu 0
    20.   {
    21.      cout<<"\nsinh vien thu:"<<i+1;
    22.      cout<<"\nnhap ho ten:";
    23.      fflush(stdin);
    24.      gets(sv[i].hoten);
    25.      cout<<"\nnhap ten lop:";
    26.      fflush(stdin);
    27.      gets(sv[i].tenlop);
    28.   }
    29.  
    30. }
    31.  
    32. //sap xep
    33. void sapxepten(sinhvien sv[],int l,int r)
    34. {
    35.   int i=l,j=r;
    36.   int x=(l+r)/2;
    37.   while(i<=j)
    38.   {
    39.     while(strcmp(sv[i].hoten,sv[x].hoten)<0 ) i++;
    40.     while(strcmp(sv[j].hoten,sv[x].hoten)>0) j--;
    41.        if(i<=j)
    42.        {
    43.           sinhvien tam = sv[i];
    44.                  sv[i] = sv[j];
    45.                  sv[j] = tam;
    46.  
    47.           i++;
    48.           j--;
    49.        }
    50.     sapxepten(sv,l,j);
    51.     sapxepten(sv,i,r);
    52.   }
    53. }
    54.  
    55. //in danh sach sinh vien
    56. void indssv(sinhvien sv[],int n)
    57. {
    58.   for(int i=0;i<n;i++)
    59.   {
    60.     //char a; thua cho nay
    61.     cout<<"\nsinh vien thu:"<<i+1<<"\n";
    62.     cout<<"\nHo ten :";
    63.     cout<<sv[i].hoten;//<<sv[i].ten;
    64.     cout<<"\nTen lop:"<<sv[i].tenlop<<"\n";
    65.   }
    66. }
    67.  
    68. sinhvien *timkiem(sinhvien sv[], int n, const char *name)
    69. {
    70.   for(int i=0; i<n; i++)
    71.      if (strstr(sv[i].hoten,name))
    72.          return sv+i;
    73.   return NULL;        
    74. }
    75.  
    76.  
    77. int main()
    78. {
    79. sinhvien sv[100];
    80. char x[8];
    81. nhapdssv(sv,n);
    82. cout<<"\n----------------------------";
    83. cout<<"\nDanh sach sinh vien nhap vao:";
    84. cout<<"\n----------------------------";
    85. indssv(sv,n);
    86. cout<<"\n----------------------------";
    87. cout<<"\nDanh sach sinh vien sau khi sap xep theo ho:";
    88. cout<<"\n----------------------------";
    89. sapxepten(sv,0,n-1);
    90. indssv(sv,n);
    91.  
    92. cout<<"\nNhap ten sinh vien can tim:";
    93. gets(x);
    94. sinhvien *p = timkiem(sv, n, x);
    95. if(p)
    96.      cout<<"\nTen sinh vien:"<<p->hoten<<"\n";
    97. else
    98.     cout<<"Khong co ten sinh vien trong danh sach"<<"\n";
    99. system("pause");
    100. }
    Đã được chỉnh sửa lần cuối bởi kimcy1992 : 13-12-2012 lúc 05:39 PM.
    Giao lưu và học hỏi
    https://www.facebook.com/kimcy1992

  9. #9
    Ngày gia nhập
    12 2012
    Bài viết
    5

    Cám ơn bạn Kimcy1992 rất nhìu.

  10. #10
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,007

    Trích dẫn Nguyên bản được gửi bởi kimcy1992 Xem bài viết
    ....
    Chưa nếu ko muốn nói tệ hơn


    Demo :
    C Code:
    1. sinhvien* timkiem(sinhvien *sv,int n,const char *name) //<<< Kimcy1992 nhin ki nhe
    2. {
    3.     for(int i=0;i<n;i++)
    4.         if (strstr(sv[i].hoten,name))
    5.             return sv+i;
    6.     return 0;
    7. }

    //trong hàm main
    C Code:
    1.  
    2.     sinhvien*p =timkiem(sv,x);
    3.     if (p) cout<<"\nHo ten sinh vien can tim:"<<p->hoten;
    4.     else cout<<"\nKo tim thay";


    Thử hoàn thiện bài này 1 lần nữa a xem nào?
    ^_,^

    Facebook : https://www.facebook.com/langmaninternet

    Bùi Tấn Quang

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

  1. Dùng hàm trong C để chuyển đổi tên thường thành hoa
    Gửi bởi lehuy_dn trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 8
    Bài viết cuối: 05-04-2015, 10:00 PM
  2. Cơ sở làm huy hiệu, bảng tên nhân viên, bảng tên mica, bảng tên ăn mòn, bảng tên thay tên
    Gửi bởi tranngocson186 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 25-05-2013, 08:37 AM
  3. Bài tập C Nhập một danh sách tên sau đó in ra tên họ, đếm xem có bao nhiêu tên họ Lý , Trần..()
    Gửi bởi trangbui trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 5
    Bài viết cuối: 01-01-2013, 06:39 PM
  4. Database Cách nối tên bảng với tên biến trên procedure trong SQL
    Gửi bởi haucanpop6590 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 13-12-2012, 11:32 AM
  5. Dùng giá trị một biến đặt tên cho Arraylist trong C#
    Gửi bởi hama2627 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 15-04-2012, 08:49 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