C語言類比實現strcpy函數,strcat函數,strcmp函數

來源:互聯網
上載者:User

標籤:編寫   strcat   strcpy   

 字串作為C語言中比較重要的一部分,學好這一部分需要我們多理解.分析。我們在學習的過程中先在腦海中有一個清晰的思路,根據這個思路在電腦上敲出來。剛開始學習字串敲出來會有很多錯誤,我們不要因此而放棄,記得之前一個學長說過找錯誤是一個程式員最快樂的,找出錯誤修改後我們就會有深刻的印象,慢慢的我們的錯誤會越來越少。想成為一名優秀的程式員,我們必須有耐心,剛開始錯誤再多,我們都認真對待不放過一個,慢慢的錯誤會越來越少。

  我覺得我學習編程,敲代碼時最開心的事情就是找到錯誤處並且修改成功。這樣在以後敲的過程中就很少在相同的地方出錯。這是我自己學習編程的一些方法,希望分享出來我們可以一起學習,不好的希望你們在評論中留言哦!

 接下來我想分享的是我學習strcpy,strncpy,strcat,strncat,strcmp的一些思路和方法。

 先說說strcpy,strncpy。

 在main函數中先定義兩個字串數組char dest[10];char src[]="abcdef";將src中的字串拷貝到dest中。用調用函數的方法實現,在main函數中傳入兩個數組,在調用函數中用指標來接收,char* dest,char* src.在調用函數中定義一個指標p指向dest,char* p=dest,斷言一下dest和src是否存在,如果存在,當src中的內容!="\0"時,將src中的內容拷貝給dest,並且同時dest的地址加加,src的地址加加。最後返回P。

#include <stdio.h>#include <string.h>#include <assert.h>char *my_strcpy(char *dest, const char *src){char *p = dest; assert(dest);assert(src);/*while (*dest++ = *src++){;}*/while(*src != ‘\0‘){*dest = *src;src++;dest++;    }*dest = *src;return p;}int main(){char dest[10];char src[] = "asdfg";char *ret = my_strcpy(dest,src);puts(ret);return 0;}

 同理strncpy跟strcpy的拷貝方法是類似的,只不過是將字串中的前幾個拷貝給另一個數組。

#include <stdio.h>#include <string.h>#include <assert.h>char *my_strncpy(char *Asd,const char *Qwe,int len){char *p=Asd;assert(Asd);assert(Qwe);    while(len){*Asd=*Qwe;Asd++;Qwe++;len--;}*Asd=‘\0‘;return p;}int main(){char Asd[12];char Qwe[]="zxcrftgytuyji";char *ret=my_strncpy(Asd,Qwe,3);    puts(ret);return 0;}

 strcat和strncat的思路;

 strcat是實現兩個字串的串連,我們要實現兩個字串的串連,先定義一個指標qwe指向被連接字串數組的首地址,當指標指向的內容不為"\0"時,指標指向的地址加加,當指標指向的內容為"\0"時,將另一個數組的指標iop指向的內容賦給qwe指標指向的內容,qwe指標指向的地址加加,iop指標指向的地址加加。當指標iop指向的內容為"\0"時,迴圈結束。將"\0"賦給指標qwe 指向的內容。

#include <stdio.h.h>#include <string.h>#include <assert.h>char *my_strcat(char *qwe,const char *iop){char *a=qwe;assert(qwe);assert(iop);while (*qwe!=‘\0‘){qwe++;}while (*iop!=‘\0‘){*qwe=*iop;qwe++;iop++;}*qwe=*iop;return a;}int main(){char qwe[10]="asdfg";char zxc[]="iop";//*zxc="iop"    char *ret=my_strcat(qwe,zxc);puts(ret);return 0;}

同理strncat串連的方法與strcat時相似的,strncat是將自身數組的前n個串連上去。

#include<stdio.h>#include<string.h>#include<assert.h>char *my_strncat(char *dest,const char *str,int n){char *p=dest;assert(dest);assert(str);while(*dest!=‘\0‘){dest++;}while(n){*dest=*str;dest++;str++;n--;}*dest=‘\0‘;return p;}int main(){char Qwe[15]="asdfgh";char Zxc[]="qwert";char *ret=my_strncat(Qwe,Zxc,3);puts(ret);return 0;}

strcmp是比較兩個字串的大小;

  我的思路是在main函數中定義兩個字串數組,char rty[]="abcdefg"; char cvb[]="abcedfg";為了看起來簡單清晰,可以使用調用函數,在main函數中傳入實參,調用函數函數中用指標來接收,const char* rty,const char *cvb,注意指標最好用const保護起來,這樣指標不容易被破壞,在使用指標之前斷言一下指標是否存在,如果存在,創造一個迴圈,進入迴圈,當指標rty與cvb指向的內容相等時迴圈結束,不相等時進入迴圈,在迴圈中如果指標rty指向的內容為"\0"時,迴圈結束return,否則指標rty與指標cvb指向的地址加加再進行比較。當兩指標指向的內容不相等時迴圈結束,傳回值為兩指標指向的內容相減,如果值大於零,rty>cvb,如果值小於零,rty<cvb,否則兩字串相等。

#include <windows.h>#include <string.h>#include <assert.h>char *my_strcmp(const char *rty,const char *cvb){assert(rty);assert(cvb);while (*rty == *cvb){if(*rty == ‘\0‘)return 0;rty++;cvb++;}    return (*rty-*cvb);}int main(){char rty[10]="abcdefg";char cvb[10]="abcedfg";int ret=my_strcmp(rty,cvb);if(ret>0){printf("rty大");}else if(ret<0){printf("cvb大");}else{printf("相等");}return 0;}

 以上是我今天分享的我的一些寫字串代碼的思路,如果大家有什麼建議希望大家留言,我會改進的。

本文出自 “Dream” 部落格,請務必保留此出處http://12951882.blog.51cto.com/12941882/1976476

C語言類比實現strcpy函數,strcat函數,strcmp函數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.