学习c语言时经常要和字符串打交道,我们知道字符串处理函数都包含在系统头文件string.h中,现在我们就来看看这些函数是如何实现的。
- 1.计算串长度函数 unsigned int stren(const char *s);
说明:结束符\0不包括在内,返回的是串长度。
unsigned int stren(const char *s)
{
int i=0;
while(s[i]!='\0')
{
i++;
}
return i;
}
- 2串拷贝函数 char* srtcpy(char *s1,const char *s2);
说明:将串s2复制到指针s1指向的串空间。返回值是串s1指针。
char* strcpy(char *s1,const char *s2)
{
int i=0;
while(s2[i]!='\0')
{
s1[i]=s2[i];i++;
}
s1[i]='\0';
return s1;
}
- 3.串连接函数 char* strcat(char *s1,const char *s2)
说明:将s2接到s1的尾部,返回值是连接后的串s1指针。注意指针指向的空间是否符合要求。
char* strcat(char *s1,const char *s2)
{
int i=0;
while(s1[i]!='\0')
i++;
while(*s2!='\0')
*(s1+i++)=*s2++; //移动指针法,先赋值再加一
*(s1+i)='\0';
return s1;
}
- 4.串比较函数 int strcmp(const char *s1,const char *s2)
说明:对串s1和串s2逐个字符比较,若全部相等,则返回0
若遇到字符不等,则停止比较,如果串s1大于s2,则返回1,否则返回-1
int strcmp(const char *s1,const char *s2)
{
int i=0;
while(s1[i]!='\0'&&s2[i]!='\0')
{
if(s1[i]!=s2[i])
break;
i++;
}
if(s1[i]>s2[i])
return 1;
else if(s1[i]<s2[i])
return -1;
else
return 0;
}
- 5.小写字母变成大写字母 char* strupr(char *s)
说明:其余字符不变,返回修改后的串s1指针。
char* strupr(char *s)
{
int i=0;
while(s[i]!='\0')
{
if(s[i]>=97&&s[i]<=122)
{
s[i]-=32;
}
i++;
}
return s;
}
- 6.大写字母变成小写字母 char* strlwr(char *s)
说明:同上
char* strlwr(char *s)
{
int i=0;
while(s[i]!='\0')
{
if(s[i]>=65&&s[i]<=90)
{
s[i]+=32;
}
i++;
}
return s;
}
下面通过一个实例来具体运用上述的字符串处理函数
#include<stdio.h>
#include<string.h>
int main()
{
char s1[50]="I'm MARKPAIN,",s2[50],s3[100];
printf("串s1为:%s,串s1的串长度为:%d\n",s1,strlen(s1));
printf("Tnput s2:");
gets(s2);
printf("s2=%s\n\n",s2);
strcpy(s3,s1);
strcat(s3,s2);
puts(s3);
printf("\n");
if(strcmp(s1,s2)>0)
printf("s1 is larger than s2\n\n");
if(strcmp(s1,s2)<0)
printf("s1 id smaller than s2\n\n");
strupr(s3);
printf("经过修改,s3变为:");
puts(s3);
printf("\n");
strlwr(s3);
printf("经过修改,s3变为:");
puts(s3);
printf("\n");
return 0;
}
运行结果如图示: