您的位置:首页 > 编程语言 > C语言/C++

7.C语言之字符串操作函数

2013-10-23 15:37 337 查看
在这一节,我想主要来介绍一下C语言操作字符串的常用函数。

C语言的字符串函数的原型都驻留在<string.h>头文件中,因此我们在处理字符串时,需要引入这个头文件。

但是,我不希望只是单纯地介绍每个函数的用法,如果那样,看API就可以了,我希望在介绍每个函数时都自己来实现一次。

1. strcpy函数

string copy,我们先来看一下该函数的用法。

#include<stdio.h>
#include<string.h>

int main()
{
char *str1="abcd";
char str2[5];
strcpy(str2,str1);
printf("%s",str2);
return 0;
}

在上段代码中,我们注意,str2的字符串长度应该是5,也就是strlen(“abcd”)加上’\0’。在上面的代码中,我们将str1的字符串复制到了str2中。

我们也来看下,这两段代码的区别:

#include<stdio.h>
#include<string.h>

int main()
{
char str1[5]="abcd";
char str2[5];
char *str3=str1;
strcpy(str2,str1);
str1[1]='t';
printf("str2:%s\n",str2);
printf("str3:%s",str3);
return 0;
}



我们对比结果可以发现他们的不同,在这里,我们不妨回头想想Java/C#的深复制和浅复制。

当我们修改第一段代码为这样时会发现错误:

#include<stdio.h>
#include<string.h>

int main()
{
char str1[5]="abcd";
char str2[3];
strcpy(str2,str1);
str1[1]='t';
printf("str2:%s\n",str2);
return 0;
}



错误的原因就是,str2不足以容纳下str1的字符串,也就是说strcpy我们没有足够的控制权,那么我们就可以来采用strncpy的方法来实现:

#include<stdio.h>
#include<string.h>

int main()
{
char str1[5]="abcd";
char str2[3];
strncpy(str2,str1,sizeof(str2)-1);
str2[sizeof(str2)-1]='\0';
printf("str2:%s\n",str2);
return 0;
}



这个方法就不多说了,就是加上了一个长度控制,接下来我们来试着实现一下简单的strcpy函数。

#include<stdio.h>
#include<string.h>

char *mycopy(char *,const char *);
int main()
{
char str1[5]="abcd";
char str2[5];
mycopy(str2,str1);
printf("%s",str2);
return 0;
}

char *mycopy(char *strDest,const char *strSource)
{
char *temp=strDest;
while(*temp++=*strSource++)
;
return strDest;
}



同理,我们也可以写出strncpy的代码:

char *mycopy(char *strDest,const char *strSource,int size)
{
char *temp=strDest;
int i =0;
while(i<size)
{
*temp++=*strSource++;
i++;
}
*temp='\0';
return strDest;
}



2. 再谈字符串的问题

其实我之前一直都没有想懂关于字符串中修改某一字符的问题,我一直很困扰这样一个问题:

我收回在上一节中说的观点,其实字符串是否能修改取决的是这段字符串是否位于常量区

3. strlen函数

这个很简单,实现一下:

size_t mylength(char * str)
{
int count=0;
while(*str++)
{
count++;
}
return (size_t)count;
}


但是如果这样来写,每次当指针前移的时候,都需要进行一次加法操作,会对效率造成一定的影响,我们可以这样来写:

size_t mylength(char * str)
{
char *temp=str;
while(*temp++)
;
return (size_t)(temp-str-1);
}


4. strcmp函数

字符串比较函数:

int mycompare(const char *str1,const char *str2)
{
while(*str1==*str2)
{
if(*str1=='\0')
{
return 0;
}
str1++;
str2++;
}
return *str1>*str2?1:-1;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: