1 將字符串轉化為整數。
long stringToInt(char *s){ long result=0; for(int i=0;s[i]!='\0';i++) { if(int(s[i])<48||int(s[i])>57) {//除去非數字 continue; } result=result*10+(s[i]-'0'); } return result;}48||int(s[i])>2將整數轉化為字符串。(考慮正負號的問(wèn)題)
void itoa (int n,char s[]){ int i,j,sign; if((sign=n)<0) 記錄符號="" ="" ="" n="-n;//使n成為正數" ="" i="0;" ="" do{="" ="" ="" ="" ="" s[i++]="n+’0’;//取下一個(gè)數字" ="" }while="" ((n/="10)">0);//刪除該數字 if(sign<0) ="" ="" ="" ="" ="" s[i++]="’-’;" ="" ="" ="" s[i]="’\0’;" ="" ="" for(j="i;j">=0;j--)//生成的數字是逆序的,所以要逆序輸出 printf('%c',s[j]);}0)>0)>3 實(shí)現字符串拷貝函數strcpy。(程序的完整性)
char * strcpy(char * strDest,const char * strSrc){if ((strDest==NULL)||(strSrc==NULL)) throw 'Invalid argument(s)'; char * strDestCopy=strDest; while ((*strDest++=*strSrc++)!='\0'); return strDestCopy;}4 編程實(shí)現memcpy函數。(以字節為單位的拷貝)
void* mymemcpy(void* dest, void* source, size_t count){ char *ret = (char *)dest; char *dest_t = ret; char *source_t = (char *)source; while (count--) { *dest_t++ = *source_t++; } return ret;}5 編程實(shí)現memmove函數。
void* memmove(void* dest, void* source, size_t count)(考慮了指針地址重合的情況) { void* ret = dest; if (dest <= source="" ||="" dest="">= (source + count)) { //Non-Overlapping Buffers //copy from lower addresses to higher addresses while (count --) *dest++ = *source++; } else { //Overlapping Buffers //copy from higher addresses to lower addresses dest += count - 1; source += count - 1; while (count--) *dest-- = *source--;l } return ret; }=>同memcpy一樣,在寫(xiě)的實(shí)際過(guò)程中我們始終以字節為單位進(jìn)行相關(guān)的拷貝。
6寫(xiě)一個(gè)函數,目的是把char組成的字符串循環(huán)右移n位。比如,“abcde”,移動(dòng)兩位變?yōu)椤癲eabc”.
編程實(shí)現:提示 strcpy函數,或者memcpy函數。
全文見(jiàn)原文。
聯(lián)系客服