//將str字符串中的空格原地刪除(就是刪除空格),但不能申請新的buffer,同時要保證O(n)級的時間複雜度。
int del_space(char *str) { printf(str); int i = 0, j = 0; while(*(str+i) != '\0') { while(*(str+i) == ' ') i ++; if(i != j) *(str+j) = *(str+i); i ++; j++; } *(str+j)='\0'; printf(str); return i-j; }
memcpy與memmove的目的都是將N個字節的源內存地址的內容拷貝到目標內存地址中。
但當源內存和目標內存存在重疊時,memcpy會出現錯誤,而memmove能正確地實施拷貝,但這也增加了一點點開銷。
void* memcpy(void* dest, const void* src, size_t n) { char* d = (char*) dest; const char* s = (const char*) src; while(n-–) *d++ = *s++; return dest; }
memmove實現
void* memmove(void* dest, const void* src, size_t n) { char* d = (char*) dest; const char* s = (const char*) src; if (s>d) { // start at beginning of s while (n--) *d++ = *s++; } else if (s<d) { // start at end of s d = d+n-1; s = s+n-1; while (n--) *d-- = *s--; } return dest; }