Bạn xem vi dụ ở đây : http://www.cplusplus.com/reference/cstring/strstr/
Đề 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 đề
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
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
nó thay đổi chuỗi màC Code:
Đã được chỉnh sửa lần cuối bởi langman : 11-12-2012 lúc 11:12 AM.
^_,^
Facebook : https://www.facebook.com/langmaninternet
Bùi Tấn Quang
vậy mình muốn in ra họ tên thì phải làm sao?
^_,^
Facebook : https://www.facebook.com/langmaninternet
Bùi Tấn Quang
C Code:
#include<iostream.h> #include<conio.h> #include<stdio.h> #include<string.h> #include<stdlib.h> struct sinhvien { char hoten[50]; char tenlop[5]; }; int n; void nhapdssv(sinhvien sv[],int &n) { cout<<"------------------------------"; cout<<"\nNhap so luong sinh vien:"; cin>>n; cout<<"------------------------------"; char a; for(int i=1;i<=n;i++) { cout<<"\nsinh vien thu:"<<i<<"\n"; cout<<"\nnhap ho ten:"; cout<<"\nnhap ten lop:\n"; } } void sapxepten(sinhvien sv[],int l,int r) { int i=l,j=r; int x=(l+r)/2; while(i<=j){ if(i<=j) { sinhvien tam = sv[i]; sv[i] = sv[j]; sv[j] = tam; i++; j--; } sapxepten(sv,i,l); sapxepten(sv,r,j); } } void indssv(sinhvien sv[],int n) { for(int i=1;i<=n;i++) { char a; cout<<"\nsinh vien thu:"<<i<<"\n"; cout<<"\nHo ten :"; cout<<sv[i].hoten;//<<sv[i].ten; cout<<"\nTen lop:"<<sv[i].tenlop<<"\n"; } } int timkiem(sinhvien sv[]) { char x[255]; for(int i=1;i<=n;i++) { if(p!=NULL) { } else return -1; } } void main() { clrscr(); sinhvien sv[100]; int x; nhapdssv(sv,n); cout<<"\n----------------------------"; cout<<"\nDanh sach sinh vien nhap vao:"; cout<<"\n----------------------------"; indssv(sv,n); cout<<"\n----------------------------"; cout<<"\nDanh sach sinh vien sau khi sap xep theo ho:"; cout<<"\n----------------------------"; sapxepten(sv,1,n); indssv(sv,n); cout<<"\nnhap ten sinh vien can tim:"; cin>>x; cout<<"\nHo ten sinh vien can tim:"; int tk=timkiem(sv); cout<<tk; getch(); } Đâ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.
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:
#include<iostream> #include<string.h> using namespace std; struct sinhvien { char hoten[50]; char tenlop[5]; }; int n; //Nhap danh sach void nhapdssv(sinhvien sv[],int &n) { //char a; thua cho nay for(int i=0;i<n;i++)//nen dat i tu 0 { fflush(stdin); gets(sv[i].hoten); fflush(stdin); gets(sv[i].tenlop); } } //sap xep void sapxepten(sinhvien sv[],int l,int r) { int i=l,j=r; int x=(l+r)/2; while(i<=j) { while(strcmp(sv[i].hoten,sv[x].hoten)<0 ) i++; while(strcmp(sv[j].hoten,sv[x].hoten)>0) j--; if(i<=j) { sinhvien tam = sv[i]; sv[i] = sv[j]; sv[j] = tam; i++; j--; } sapxepten(sv,l,j); sapxepten(sv,i,r); } } //in danh sach sinh vien void indssv(sinhvien sv[],int n) { for(int i=0;i<n;i++) { //char a; thua cho nay } } sinhvien *timkiem(sinhvien sv[], int n, const char *name) { for(int i=0; i<n; i++) if (strstr(sv[i].hoten,name)) return sv+i; return NULL; } int main() { sinhvien sv[100]; char x[8]; nhapdssv(sv,n); indssv(sv,n); sapxepten(sv,0,n-1); indssv(sv,n); gets(x); sinhvien *p = timkiem(sv, n, x); if(p) else system("pause"); }
Đã đượ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
Cám ơn bạn Kimcy1992 rất nhìu.
Chưa nếu ko muốn nói tệ hơn
Demo :
C Code:
sinhvien* timkiem(sinhvien *sv,int n,const char *name) //<<< Kimcy1992 nhin ki nhe { for(int i=0;i<n;i++) return sv+i; return 0; }
//trong hàm main
C Code:
sinhvien*p =timkiem(sv,x); if (p) cout<<"\nHo ten sinh vien can tim:"<<p->hoten; 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