C語言字串相關操作及原始碼

2021-08-06 03:40:29 字數 3467 閱讀 1312

// 在標準庫中,函式不考慮src的'\0'終止字元,始終從src中拷貝count個字元到dst中。

// 建議使用memmove函式代替memcpy

void *memcpy ( void *dst, const void *src, size_t count )

return(ret);

}// 首先考慮源位址與目標位址是否存在重疊部分(目標位址是源位址連續記憶體的一部分),

// 如果有重疊部分從高位址向位址賦值,否則從低位址向高位址賦值。

void *memmove(void *dst, const void *src, size_t count)

}else

}return(ret);

}// 把src中所有字元(包括'\0')拷貝到dst中;

// 如果dst的記憶體長度小於src,會造成dst越界

char *strcpy(char *dst, const char *src)

// 把src中前count個字元拷貝到dst中;count小於sizeof(src)時拷貝後dst末尾要加'\0'

// 通常count是sizeof(dst)-1的值,防止越界拷貝

char *strncpy(char *dst, const char *src, size_t count)

char *start = dst;

while (count && (*start++ = *src++)) /* copy string */

count--;

if (count) // sizeof(dst) 大於 sizeof(src)

while (--count)

*start++ = '\0';

return(dst);

}// src字串連線到dst末尾(注意越界)

char *strcat(char *dst, const char *src)

char* strncat(char *dst, const char *src, size_t count)

char *start = dst;

while (*start)

while (count--)

*start = '\0';

return(dst);

}// 記憶體塊ptr1前count位元組與ptr2前n個位元組比較

// 返回值<0: ptr1 < ptr2

// =0: prt1 == ptr2

// >0: ptr1 > ptr2

int memcmp(const void *ptr1, const void *ptr2, size_t count)

// 遇到第乙個不相等的字元或者count=0時終止

while (--count && *(char *)ptr1 == *(char *)ptr2)

return( *((unsigned char *)ptr1) - *((unsigned char *)ptr2) );

}int strncmp(const char *ptr1, const char *ptr2, size_t count)

while (--count && *ptr1 == *ptr2)

return (*(unsigned char *)ptr1 - *(unsigned char *)ptr2);

}int strcmp(const char *ptr1, const char *ptr2)

return (*(unsigned char *)ptr1 - *(unsigned char *)ptr2);

}// 定位value值第一次在buf中的位置,並返回改位置的指標。

// count指定遍歷buf多少個位元組。

void *memchr(const void *buf, int value, size_t count)

return(count ? (void *)buf : null);

}char *strchr(const char *buf, int character)

//定位value值最後一次在buf中的位置,並返回改位置的指標

char * strrchr(char *str, int character)

//在buf字串中的哪個索引位置第一次出現了keys字串才有的字元

size_t strcspn(const char *buf, const char *keys)

count = 0;

map[0] |= 1; /* null chars not considered */

while (!(map[*str >> 3] & (1 << (*str & 7))))

return(count);

}//在buf字串中的哪個索引位置最後一次出現了keys字串才有的字元

size_t strspn(const char *buf, const char *keys)

if (*str)

return(count);

}return(0);

}// 在buf字串中的哪個索引位置第一次出現了keys字串才有的字元,返回那個位置的指標

char* strpbrk(const char *buf, const char *keys)

while (*str)

return(null);

}// strbuf的某段子字串與sunstring一致,並返回第乙個字元相等位置指標

char *strstr(const char *strbuf, const char *substring)

if (!*s2)

return(cp);

cp++;

}return(null);

}#if 0

// 三種字串分隔方法,每種方法都會修改原字串的完整性

// strtok方法遍歷strbuf;如果strbuf的字元符合delimiters字串中某個分割字元,把該字元置換為'\0',返回字串開始位置的指標。剩下的字串保留在乙個全域性變數中

// 該方法不適合多執行緒操作

char *strtok(char *strbuf, const char *delimiters);

// strtok_s是windows下的方法,作用等同於strtok。但是strtok_s把剩餘字串儲存到subbuf中。

char *strtok_s( char *strbuf, const char *strdelimit, char **subbuf);

// strtok_r是linux下的方法

char *strtok_r(char *strbuf, const char *delim, char **subbuf);

#endif

// 返回字串長度('\0'不會計算在內,區別於sizeof)

size_t strlen(char *str);

C 字串類原始碼

參考了c builder中的ansistring,實現了常用的功能,其它需要的可以自己新增.cesstring.h 類似ansistring 的乙個類,用標準c 編寫,可以用在vc和cb中 ifndef cesstring h define cesstring h include include i...

c語言字串相關

在c語言中,有兩個函式可以在控制台 顯示器 上輸出字串,分別是 在c語言中,有兩個函式可以讓使用者從鍵盤上輸入字串,它們分別是 但是,scanf 和 gets 是有區別的 strcat 是 string catenate 的縮寫,意思是把兩個字串拼接在一起,語法格式為 strcat arraynam...

左旋字串原始碼

include using namespace std void reverse char pbegin,char pend char reversesentence char pdata else if pend pend 0 else return pdata void leftreverse ...