c语言字符串操作自己编写函数,C语言字符串操作函数-原型

1、strcat

char *strcat(char *strDest, const char *strScr) //将源字符串加const,表明其为输入参数

{

char * address = strDest; //该语句若放在assert之后,编译出错

assert((strDest != NULL) && (strScr != NULL)); //对源地址和目的地址加非0断言

while(*strDest) //是while(*strDest!='\0')的简化形式

{ //若使用while(*strDest++),则会出错,因为++是不受循环

strDest++; //约束的。所以要在循环体内++;因为要是*strDest最后指

} //向该字符串的结束标志’\0’。

while(*strDest++ = *strScr++) //是while((*strDest++ = *strScr++)!='\0')的简化形式

{

NULL; //该循环条件内可以用++,

} //此处可以加语句*strDest='\0';有无必要?

return address; //为了实现链式操作,将目的地址返回

}

2、strcmp

int __cdecl strcmp (

const char * src,

const char * dst

)

{

int ret = 0;

while(!(ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst)

++src, ++dst;

if ( ret < 0 )

ret = -1 ;

else if ( ret > 0 )

ret = 1 ;

return(ret);

}

int strcmp(const char *dest, const char *source)

{

assert((NULL != dest) && (NULL != source));

while (*dest && *source && (*dest == *source))

{

dest ++;

source ++;

}

return *dest - *source;

/*如果dest > source,则返回值大于0,如果dest = source,则返回值等于0,如果dest < source ,则返回值小于0。*/

}

3、strcpy

char *strcpy(char *strDestination,const char *strSource)

{

assert(strDestination!=NULL && strSource!=NULL);

char *strD=strDestination;

while ((*strD++=*strSource++)!='\0');

return strDestination;

}

4、strncmp

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

{

char *tmp = dest;

assert(src!=NULL && dest!=NULL);

while (count) {

if ((*tmp = *src) != 0)

src++;

tmp++;

count--;

}

return dest;

}

5、strrchr

char *

strrchr (const char *s, int c)

{

register const char *found, *p;

c = (unsigned char) c;

/* Since strchr is fast, we use it rather than the obvious loop. */

if (c == '\0')

return strchr (s, '\0');

found = NULL;

while ((p = strchr (s, c)) != NULL)

{

found = p;

s = p + 1;

}

return (char *) found;

}

6、字符串转换为整型:

int atoi(char * str){

int i = 0;

char *tmp = str;

char c;

while(c=*str++){

if(c>='0' && c<='9'){

i=i*10+(c-'0');

}

else{

return -1;

}

}

return i;

}

7、strstr

#include

#include

char *mystrstr(const char *s1,const char *s2){

int n;

if(*s2){

while(*s1){

for(n=0;*(s1+n)==*(s2+n);n++){

if(!*(s2+n+1)){

return (char *)s1;

}

}

s1++;

}

return NULL;

}

else

return (char *)s1;

}

void main(){

char *t=mystrstr("adcacde","cd");

printf("%s\n",t);

}

int strstr(char *string,char *substring)

{

int len1=strlen(string);

int len2=strlen(substring);

for (int i=0; i<=len1-len2; i++) //复杂度为O(m*n)

{

for (int j=0; j

{

if (string[i+j]!=substring[j])

break;

if (j==len2-1)

return 1;

}

}

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值