Giả lập hàm strlen trong C.
Code:#include<stdio.h> int m_strlen(const char *p) { int i=0; while(p[i++]!=0); return i-1; } int main() { printf("%d",m_strlen("")); printf("\n%d",m_strlen("123456789")); return 0; }
Mình hôm nay sẽ làm hàm tính a lủy thừa n của 1 số:
Bạn chú ý chương trình này số lần lặp tối đa chỉ là sizeof(n)*8; nhanh rất nhiều.Code:#include<stdio.h> double LuyThua(double a,int n) //hàm tính a mũ n. { double kq=1, gt=a; while(n) { if(n%2==1) kq=kq*gt; gt=gt*gt; n=n/2; } return kq; } int main() { printf("%f",GiaiThua(2,3)); return 0; }
ví dụ n=128 thì vòng lặp chỉ thực hiện 8 lần. Còn nếu bạn viết theo kiểu đệ quy là 128 lần.
Tiếp tục nếu số n của bạn là 2 mũ 10000 thì thì viết theo đệ quy là lặp 2 mũ 10000 lần lặp đến sáng. còn theo chương trình trên là 10000 lần lặp trong 30s hihi.
Đã được chỉnh sửa lần cuối bởi shinichi_haha : 27-11-2006 lúc 06:02 PM.
Giả lập hàm strlen trong C.
Code:#include<stdio.h> int m_strlen(const char *p) { int i=0; while(p[i++]!=0); return i-1; } int main() { printf("%d",m_strlen("")); printf("\n%d",m_strlen("123456789")); return 0; }
Hàm m_strdup tạo một chuổi mới có nội dung hoàn toàn giống chuổi ban đầu.
Ở đây mình cũng có câu hỏi cho các cậu chú ý câu lệnh while(dup[i++]=*s++); dòng này dùng để chép chuổi s qua chuổi dup tại sao mình lại không dùng như sau while(*dup++=*s++) như đoạn code copy chuổi sau:http://forums.congdongcviet.com/showthread.php?t=833.Code:char *m_strdup(const char *s) { char *dup; int i=0,len=m_strlen(s); //Hàm m_strlen(s) lấy độ lớn của chuổi s được giả lập ở trên. dup=(char*)malloc(len+1); while(dup[i++]=*s++); return dup; }
Đã được chỉnh sửa lần cuối bởi shinichi_haha : 30-11-2006 lúc 06:23 PM.
hay was không biết còn có nhiểu bài nữa không nhỉ.?
tiện đây các bác cho em hỏi c++: dó là viết mọt hàm sau đó có từ const ở cuối ten hàm nghĩa là thế nào thế
ví dụ : int luythu const (int a) cái gì đó em không nhớ nữa
có thể giải thích cho không??
abc345
hàm int luythu(int a) const;Nguyên bản được gửi bởi tuyetton
Từ khóa const ở đây báo cho trình biên dịch biết rằng đối tượng this truy cập tới hàm này là đối tượng hằng. Các biến thành viên trong this sẽ không được thay đổi.
nếu trong hàm lủy thừa của bạn có đoạn mã thay đổi giá trị của this thì trình biên dịch sẽ báo lỗi cụ thể VC++ là: l-value specifies const object
Hàm char *m_strcpy(char *d,const char *s);
Code:char *m_strcpy(char *d,char *s) { char *tmp=s; while(*d++=*s++); return tmp; }
Đã được chỉnh sửa lần cuối bởi shinichi_haha : 02-12-2006 lúc 03:00 PM.
vì bạn không muốn trả về '\0'Nguyên bản được gửi bởi shinichi_haha
@def: hix đúng rồi.
Lâu rồi chưa post bài sợ nguội nên post bài nhỏ chơi.
Chương trình giả lập lệnh cat trong Unix.
/*Ghi chú: chương trình này có thể biên dịch bằng các trình biên dịch cùng họ với c có thể test trên windows */
Code:#include<stdio.h> #include<stdio.h> int main(int ac,char **agrs) { int ch,i=1; FILE *pf; pf=stdin; do { if(ac>1&&(pf=fopen(agrs[i],"r"))==NULL) { fprintf(stderr,"loi mo tap tin: %s \n",agrs[i]); continue; } while((ch=getc(pf))!=EOF) { putc(ch,stdout); } printf("\n"); }while(++i<ac); return 0; }