本篇內(nèi)容介紹了“C語言字符串操作函數(shù)的實現(xiàn)方法”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

10年積累的成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認識你,你也不認識我。但先網(wǎng)站設(shè)計后付款的網(wǎng)站建設(shè)流程,更有烏審免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*******string庫函數(shù)集合********/
int my_strlen(const char *str)
{
int ret = 0;
assert(str != NULL);
while(*str++ != '\0')
++ret;
return ret;
}
/*******不得自定義變量*********/
int my_strlen2(const char *str)
{
if((*str) == '\0')
return 0;
else
return (1 + my_strlen(++str));
}
//=========字符串查找=========//
char *my_strstr(char *strSrc, char *substr)
{
int i, j;
int lenstr, sublen;
int num;
if(strSrc == NULL || substr == NULL)
return NULL;
lenstr = strlen(strSrc);
sublen = strlen(substr);
if(lenstr < sublen)
return NULL;
num = lenstr - sublen;
for(i = 0; i <= num; i++)
{
for(j = 0; j < sublen; j++)
{
if(strSrc[i+j] != substr[j])
break;
}
if(j == sublen)
return (strSrc + i);
}
return NULL;
}
char *my_strstr2(const char *strSrc, const char *str)
{
assert(strSrc != NULL && str != NULL);
const char *s = strSrc;
const char *t = str;
for(; *strSrc != '\0'; ++strSrc)
{
for( s= strSrc, t = str; (*t != '\0') && (*s == *t); ++s, ++t )
{
}
if(*t == '\0')
return (char *)strSrc;
}
return NULL;
}
//=========字符串拷貝=========//
char *my_strcpy(char *strDst, char *strSrc)
{
if(strDst == strSrc)
return strDst;
assert( (strDst != NULL) && (strSrc != NULL) );
char *address = strDst;
while( (*strDst++ = *strSrc++) != '\0');
return address;
}
char *my_strncpy(char *strDst, char *strSrc, int count)
{
assert(strDst != NULL && strSrc != NULL);
char *address = strDst;
while((count--) && (*strSrc != '\0'))
*strDst ++ = *strSrc++;
*strDst = '\0';
return address;
}
//==========字符串鏈接=========//
char *my_strcat(char *strDst, const char *strSrc)
{
assert((strDst != NULL) && (strSrc != NULL));
char *address = strDst;
while(*strDst != '\0')
++ strDst;
while((*strDst++ = *strSrc++) != '\0');
return address;
}
char *my_strncat(char *strDst, const char *strSrc, unsigned int count)
{
assert((strDst != NULL) && (strSrc != NULL));
char *address = strDst;
while(*strDst != '\0')
++strDst;
while(count-- && *strSrc != '\0')
*strDst++ = *strSrc++;
*strDst = '\0';
return address;
}
//=========將字符串所有替換成字符=========//
char *my_strset(char *str, int c)
{
assert(str != NULL);
char *s = str;
for(; *s != '\0'; ++s)
*s = (char)c;
return str;
}
char *my_strnset(char *str, int c, unsigned int count)
{
assert(str != NULL);
char *s = str;
for(; (*s != '\0') && ((s - str)<count); ++s)
*s = (char) c;
return str;
}
//=====================================================
// 題目:比較2個字符串,用O(n)時間和恒量空間
//=====================================================
int my_strcmp(const char *str1, const char *str2)
{
while((*str1 != '\0') && (*str2 != '\0') && (*str1 = *str2))
{
str1++;
str2++;
}
return (*str1 - *str2);
}
int my_strncmp(const char *str1, const char *str2, unsigned int count)
{
assert((str1 != NULL) && (str2 != NULL));
while(*str1 && *str2 && (*str1 == *str2) && count--)
{
++ str1;
-- str2;
}
return (*str1 - *str2);
}
//===========查找字符出現(xiàn)的位置============//
char *my_strrchr(const char *str, int c)
{
assert(str != NULL);
const char *s = str;
while(*s != '\0')
++ s;
for(--s; *s != (char)c; --s)
{
if(s == str)
return NULL;
}
return (char *)s;
}
//===========字符串的逆序============//
char my_strrev(char *str)
{
assert(str != NULL);
char *s = str, *t = str, c;
while(*t != '\0')
++t;
for(--t; s < t; ++s, --t)
{
c = *s;
*s = *t;
*t = c;
}
return str;
}
//=========字符串的切割==========//
char *my_strtok(char *strToken, const char *str)
{
assert(str != NULL);
static char *last;
if(strToken == NULL && (strToken = last)==NULL)
return (NULL);
char *s = strToken;
const char * t = str;
while(*s != '\0')
{
t = str;
while(*t != '\0')
{
if(*s == *t)
{
last = s + 1;
if(s - strToken == 0)
{
strToken = last;
break;
}
*(strToken + (s - strToken))= '\0';
return strToken;
}
++t;
}
++s;
}
return NULL;
}
//=========內(nèi)存拷貝========//
void my_memcpy(void *dst, const void *src, unsigned int num)
{
assert((dst!=NULL) && (src != NULL));
void *address = dst;
while(num--)
{
*(char *)dst = *(char *)src;
dst = (char *)dst + 1;
src = (char *)src + 1;
}
return address;
}
//===========內(nèi)存清零=========//
void *my_memset(void *str, int c, unsigned int count)
{
assert(str != NULL);
void *s = str;
while(count --)
{
*(char *)s = (char)c;
s = (char *)s + 1;
}
return str;
}
//=====================================================
// 題目:在給定的字符串中查找【由給定字符ch構(gòu)成的】長度最長的串
// 分析:例如在abccdefaaag中長度最長的是aaa
// 返回值:查找串的首地址
//=====================================================
char *search_str_maxlen(char *strSrc, char ch)
{
char *strTemp = NULL, *strDst = NULL;
int iTemp, iCount = 0;
while(*strSrc != '\0')
{
if((*strSrc) == ch)
{
iTemp = 0;
strTemp = strSrc;
while((*strSrc) == ch)
{
strSrc++;
iTemp++;
}
if(iTemp > iCount)
{
iCount = iTemp;
strDst = strTemp;
}
if((*strSrc)=='\0')
break;
}
strSrc++;
}
return strDst;
}
//========================================================
// 題目:在一個字符串中找到第一個只出現(xiàn)一次的字符。如輸入abaccdeff,則輸出b。
// 分析:這道題是2006 年google 的一道筆試題。
// 思路:將所有出現(xiàn)的字符的個數(shù)存儲在數(shù)組a中
//========================================================
char first_single_char(char *str)
{
int a[255];
char *p = str;
memset(a, 0, 255*sizeof(int));
while(*p != '\0')
{
a[*p] ++;
p++;
}
p = str;
while((*p) != '\0')
{
if(a[*p] == 1)
return *p;
}
return '\0';
}
花了一個下午,終于搞定。“C語言字符串操作函數(shù)的實現(xiàn)方法”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!
新聞標題:C語言字符串操作函數(shù)的實現(xiàn)方法
轉(zhuǎn)載源于:http://chinadenli.net/article42/jiehec.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護、網(wǎng)站設(shè)計公司、域名注冊、標簽優(yōu)化、網(wǎng)站排名、網(wǎng)站設(shè)計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)