常见的字符串函数包括strlen,strcpy和strncpy,strcat和strncat,strcmp和strncmp,下面一一描述他们的功能和实现方法。
①strlen()
原型:extern int strlen(char *s);
用法:#include <string.h>
功能:计算字符串s的长度
说明:返回s的长度,不包括结束符NULL。
实现代码:
#include <stdio.h>
#define MAX_SIZE 1024
int my_strlen(char *s)
{
int i = 0;
while(*s != '\0')
{
i++;
s++;
}
return i;
}
int main()
{
char src[MAX_SIZE];
printf("please input a string:\n");
scanf("%s",src);
int len = my_strlen(src);
printf("len = %d\n",len);
return 0;
}
②strcpy和strncpy
strcpy():
原型:extern char *strcpy(char *dest,char *src);
用法:#include <string.h>
功能:把src所指由NUL结束的字符串复制到dest所指的数组中。
返回指向dest结尾处字符(NUL)的指针。
实现代码:
#include <stdio.h>
#define MAX_SIZE 1024
char *my_strcpy(char *dest, char *src)
{
char *temp = dest; //定义中间变量存放形参的地址
while(*src != '\0')
{
*temp = *src; //将src中的内容依次赋值给temp
temp++;
src++;
}
*temp = '\0'; //给temp加上结束字符
return dest; //返回temp的首地址,即dest
}
int main()
{
char dest[MAX_SIZE] = {0};
char src[MAX_SIZE] = {0};
printf("please input dest:\n");
scanf("%s",dest);
printf("please input src:\n");
scanf("%s",src);
char *strcpy = my_strcpy(dest,src); //调用函数
printf("strcpy = %s\n",strcpy);
}
strncpy():
原型:extern char *strncpy(char *dest, char *src, int n);
用法:#include <string.h>
功能:把src所指由NULL结束的字符串的前n个字节复制到dest所指的数组中。
说明:
如果src的前n个字节不含NULL字符,则结果不会以NULL字符结束。
如果src的长度小于n个字节,则以NULL填充dest直到复制完n个字节。
src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
返回指向dest的指针。
实现代码:
#include <stdio.h>
#define MAX_SIZE 1024
char *my_strncpy(char *dest, char *src, int num)
{
int i;
char *temp = dest; //定义中间变量存放形参的地址
for(i = 0; i < num; i++) //已知循环次数,使用for循环
{
*temp = *src; //将src中的内容依次赋值给temp
temp++;
src++;
}
*temp = '\0'; //给temp加上结束字符
return dest; //返回temp的首地址,即dest
}
int main()
{
char dest[MAX_SIZE] = {0};
char src[MAX_SIZE] = {0};
printf("please input dest:\n");
scanf("%s",dest);
printf("please input src:\n");
scanf("%s",src);
char *result = my_strncpy(dest,src,5); //调用函数
printf("strcpy = %s\n",result);
}
③strcat和strncat
strcat():
原型:extern char *strcat(char *dest,char *src);
用法:#include <string.h>
功能:把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'。
返回指向dest的指针。
实现代码:
#include <stdio.h>
#define MAX_SIZE 1024
char *my_strcat(char *dest, char *src)
{
char *temp = dest;
while(*temp != '\0')
{
temp++;
}
while(*src != '\0')
{
*temp = *src;
temp++;
src++;
}
*temp = '\0';
return dest;
}
int main()
{
char dest[MAX_SIZE] = "hi hi";
char src[MAX_SIZE] = "hello world";
char *result = my_strcat(dest,src);
printf("result = %s\n",result);
return 0;
}
strncat:
原型:extern char *strncat(char *dest,char *src,int n);
用法:#include <string.h>
功能:把src所指字符串的前n个字符添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'。
返回指向dest的指针。
实现代码:
#include <stdio.h>
#define MAX_SIZE 1024
char *my_strncat(char *dest, char *src, int num)
{
int i;
char *temp = dest;
while(*temp != '\0')
{
temp++;
}
for(i = 0; i < num; i++)
{
*temp = *src;
temp++;
src++;
}
*temp = '\0';
return dest;
}
int main()
{
char dest[MAX_SIZE] = "hi hi";
char src[MAX_SIZE] = "hello world";
char *result = my_strncat(dest,src,8);
printf("dest = %s\n",result);
return 0;
}
④strcmp和strncmp
strcmp:
功 能: 将一个串与另一个比较
用 法: intstrcmpi(char *str1, char *str2);
实现代码:
#include <stdio.h>
#define MAX_SIZE 1024
int my_strcmp(char *dest, char *src)
{
while(*dest != '\0' && *src != '\0') //控制条件为两个数组中有一个先结束
{
if(*dest > *src)
{
return 1;
}
if(*dest < *src)
{
return -1;
}
dest++;
src++;
}
//判断那个数组先结束
if(*dest == '\0' && *src == '\0') //两个数组同时结束
{
return 0;
}
if(*dest == '\0' && *src != '\0') //dest先结束
{
return -1;
}
if(*dest != '\0' && *src == '\0') //src先结束
{
return 1;
}
}
int main()
{
char dest[MAX_SIZE] = {0};
char src[MAX_SIZE] = {0};
printf("please input dest:\n");
scanf("%s",dest);
printf("please input src:\n");
scanf("%s",src);
int result = my_strcmp(dest,src); //调用函数
printf("result = %d\n",result);
return 0;
}
strncmp:
功 能: 把串中的一部分与另一串中的一部分比较 (前n个字符)
用 法: int strncmp(char *str1, char *str2,int maxlen);
实现代码:
#include <stdio.h>
#define MAX_SIZE 1024
int my_strncmp(char *dest, char *src, int n)
{
int i;
int result = 0;
for(i = 0; i < n; i++)
{
if(*dest > *src)
{
result = 1;
break;
}
if(*dest < *src)
{
result = -1;
break;
}
if(*dest = *src)
{
dest++;
src++;
}
}
return result;
}
int main()
{
char dest[MAX_SIZE];
char src[MAX_SIZE];
int n;
printf("please input dest:\n");
scanf("%s",dest);
printf("please input src:\n");
scanf("%s",src);
getchar();
printf("please input n:\n");
scanf("%d",&n);
int result = my_strncmp(dest,src,n); //调用函数
printf("result = %d\n",result);
return 0;
}