前言
本文主要介绍字符函数和字符串函数的使用以及相应的实现过程,进一步加深了解C语言中字符和字符串的相关库函数。
一、求字符串长度
在c语言中,求字符串的长度用 strlen 函数。
strlen
其标准格式为: size_t strlen ( const char * str );
该函数参数为const修饰的字符指针,其返回值为无符号整型(size_t)。
该函数在使用过程中要注意以下几点:
(1)strlen函数求解字符串的长度不包括 \0。
即字符串已经 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前面出现的字符个数。
(2)求解的字符串必须要以 ‘\0’ 结束。
例1:求解字符串长度
#include<stdio.h>
int main()
{
char* a = "hfoervve";
int ret = strlen(a);
printf("%d\n", ret);
return 0;
}
结果:
例2:若求解字符串中没有包含 \0,即:
#include<stdio.h>
int main()
{
char a[] = {
'a','b','c','d'};
int ret = strlen(a);
printf("%d\n", ret);
return 0;
}
结果:
该值为随机值(即返回数组a 后出现的第一个\0)
例3:strlen函数的返回值为size_t(无符号整型)
#include <stdio.h>
int main()
{
const char* str1 = "abcdef";
const char* str2 = "bbb";
if (strlen(str2) - strlen(str1) > 0)
{
printf("str2>str1\n");
}
else
{
printf("srt1>str2\n");
}
return 0;
}
结果:
例4:模拟实现strlen 函数
#include<stdio.h>
#include<string.h>
#include<assert.h>
int my_strlen(const char* str)
{
int count = 0;
while (*str)
{
count++;
str++;
}
return count;
}
int main()
{
char* a = "jfoefnosdncosjf";
int ret1=strlen(a);
int ret2 = my_strlen(a);
printf("%d\n", ret1);
printf("%d\n", ret2);
return 0;
}
结果:
二、字符串拷贝函数
strcpy
其标准格式为: char * strcpy(char * destination, const char * source );
该函数参数分为目的字符串(char * destination)和源字符串(const char * source)。其返回值为字符指针类型。
该函数在使用过程中要注意以下几点:
(1)源字符串必须以 ‘\0’ 结束。即要保证拷贝的字符串的完整性。
(2)strcpy函数会将源字符串中的 ‘\0’ 拷贝到目标空间。
(3)目标空间必须足够大,以确保能存放源字符串。
例1:拷贝字符串
#include<stdio.h>
#include<string.h>
int main()
{
char a1[] = "vndfjvbdfivnkx";
char a2[] = "ndijifhons";
strcpy(a1, a2);
printf("%s\n", a1);
return 0;
}
结果:
例2:模拟实现字符串拷贝函数
#include<stdio.h>
#include<string.h>
#include<assert.h>
char* my_strcpy(char* a1, const char* a2)
{
assert(a1 != NULL);
assert(a2 != NULL);
char* ret = a1;
while (*a2 != '\0')
{
*a1++ = *a2++;
}
*a1 = *a2;
return ret;//返回目的空间的起始地址
}
int main()
{
char a1[] = "vndfjvbdfivnkx";
char a2[] = "ndijifhons";
strcpy(a1, a2);
printf("%s\n", a1);
my_strcpy(a1, a2);
printf("%s\n", a1);
return 0;
}
结果:
三、字符串追加函数
strcat
其标准格式为: char * strcat ( char * destination, const char * source );
该函数参数分为目的字符串(char * destination)和源字符串(const char * source)。其返回值为字符指针类型。
该函数在使用过程中要注意以下几点:
(1)源字符串必须以 ‘\0’ 结束。
(2)目标空间必须有足够的大,能容纳下源字符串的内容。
(3)目标空间必须可修改。
例1:实现字符串追加
#include<stdio.h>
#include<string.h>
int main()
{
char a1[30] = "fnwieubicn";
char a2[] = "ivni";
strcat(a1, a2);
printf("%s\n", a1);
return 0;
}
结果:
例2:模拟实现字符串追加函数
#include<stdio.h>
#include<string.h>
#include<assert.h>
//模拟实现strcat
char* my_strcat(char* b, char* a)
{
char* ret = b;
while (*a != '\0')
{
*b++ = *a++;
}
return ret;
};
int main()
{
char a1[30] = "fnwieubicn";
char a2[] = "ivni";
strcat(a1, a2);
printf("%s\n", a1);
my_strcat(a1, a2);
printf("%s\n", a1);
}
结果:
四、字符串的比较
strcmp
其标准格式为: int strcmp (const char * str1, const char * str2 );
该函数参数为两个字符串,其返回值为整型(int)。
该函数在使用过程中要注意以下几点:
(1)第一个字符串大于第二个字符串,则返回大于0的数字。
(2)第一个字符串等于第二个字符串,则返回0。
(3)第一个字符串小于第二个字符串,则返回小于0的数字。
例1:实现字符串的比较
#include<stdio.h>
#include<string.h>
int main()
{
char* p1 = "vfdvbdb";
char* p2 = "nevnoe";
int ret = strcmp(p1, p2);
printf("%d\n", ret);
return 0;
}
结果:
例2:字符串比较函数的实现
#include<stdio.h>
#include<string.h>
#include<assert.h>
int my_strcmp(const char* p1, const char* p2)
{
assert(p1 != NULL && p2 != NULL);
while (*p1 == *p2)
{
if (*p1 == '\0')
{
return 0;
}
p1++;
p2++;
}
if (*p1 > *p2)
{
return 1;
}
else if (*p1 < *p2)
{
return -1;
}
}
int main()
{
char* p1 = "vfdvbdb";
char* p2 = "nevnoe";
int ret = strcmp(p1, p2);
printf("%d\n", ret);
int ret1 = my_strcmp(p1, p2);
printf("%d\n", ret1);
return 0;
}
结果:
总结
以上就是本文的全部内容。