字符串结束符 '\0' 的 ASCII 值 正好是 0。 所以 用 0 判断 和 用 '\0' 判断,结果一样。
1) strcat 字符串连接函数
2)strcpy 字符串拷贝函数
3)strlen 字符串长度函数
4)strstr查找字符串函数
1) strcat 字符串连接函数
char *my_strcat(char *dst,const char *src){
if((dst==NULL) || (src==NULL))
return NULL;
char *p=dst;//下面的操作会改变目的指针的指向,所以先定义一个指针来记录目的指针dest最开始的指向
while(*dst != '\0') dst++;
while(*src != '\0') *dst++=*src++;
*dst='\0';
return p;//dst现在指向的是最后一位字符,在这里返回dst,会出现错误
}
2) strcpy 字符串拷贝函数
char *my_strcpy(char *dst,const char *src){
if((src==NULL) || (dst == NULL)) //判断源指针和目的指针是否为空指针
return NULL;
char *p=dst;
while( (*dst++==*src++)!= '\0') ;
return p;//目的指针dst已经移动,所以定义一个指针p记录首指针
}
3) strlen 字符串长度函数
int my_strlen(char *src){
assert(src!=NULL);
int len;
while((*src++) != '\0')
len++;
return len;
}
4) strstr查找字符串函数
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
char *my_strstr(const char *dst, const char *src) {
assert(dst != NULL);
while ((*dst != *src) && (*dst !='\0')) {
dst++;
}
while (*dst == *src) {
const char *pdst = dst;
const char *psrc = src;
while (*pdst == *psrc) {
pdst++;
psrc++;
}
if (*psrc == '\0')
return (char *)dst;
else
dst++;
}
return NULL;
}
int main() {
char a[] = "asdfghjkl";
char b[] = "gh";
char *p = my_strstr(a, b);
printf("%s\n", p);
system("pause");
return 0;
}
5)strcmp 字符串比较函数
if str1>str2 返回1
if str1=str2 返回0
if str1<str2 返回-1
对字符的ASCII码进行比较,一种是利用减法运算判断结果,另一种是利用比较运算得出结果。
int my_strcmp(const char *str1, const char *str2) {
if ((str1 == NULL) || (str2 == NULL)) { //判断是否为空指针
return 2;
}
while ((*str1 == *str2) && (*str1 != '\0')) { //如果*str1 == *str2,则*str1 != '\0'和*str2 != '\0'的作用一样
str1++;
str2++;
}
if (*(unsigned char*)str1 > *(unsigned char*)str2) { /*使用*(unsigned char*)str1而不是用*str1。这是因为传入的参数为有符号数,有符号字符值的范围是-128~127,无符号字符值的范围是0~255,而字符串的ASCII没有负值,若不转化为无符号数这回在减法实现时出现错误。*/
return 1;
}
else if (*(unsigned char*)str1 < *(unsigned char*)str2) {
return -1;
}
else
return 0;
}
void main() {
char a[] = "asdf";
char *b = "asdf";
int c;
c = my_strcmp(a, b);
printf("%d\n", c);
system("pause");
}
本文详细介绍了C语言中常用的字符串操作函数,包括字符串连接(strcat)、拷贝(strcpy)、长度计算(strlen)、查找(strstr)及比较(strcmp)等功能的具体实现方式。
1021

被折叠的 条评论
为什么被折叠?



