C语言字符串函数入门

作者:build小春宝 时间:2021-07-22 17:10:15 

实现字符串库函数功能

有些时候我们可能会被限制无法使用库函数,这个时候我们需要编写自己的库函数。但了解了字符串库函数的功能之后,想要实现并不困难,今天我们用数组和循环来简单实现几个字符串库函数的功能。

1.strlen函数

strlen函数使用来求字符串长度的,遇到\0就会停止,并返回字符串的长度,接下来根据这个特性来编写一下我们自己的strlen

int my_strlen(char string[]) {
int count= 0;
while (string[count] != NULL) {        
count++;
}
return count;
}//也可以将while的判断条件改为string[count]

有些小伙伴应该知道递归的实现,但是这里涉及了指针的内容,我就不教大家实现了

2.strcmp函数

strcmp字符串比较函数,对两个字符串进行比较,相当返回0,前一个字符串大于后一个字符串会返回大于0的数,小于则返回小于0的数,至于具体返回多少,则需要看编译器。

在实现strcmp功能之前,我们需要了解它的机制,strcmp是一个字符一个字符的比较ASCII值的

int  my_strcmp(char string1[], char string2[]) {
int i = 0;
  //当两个字符串都没有达到末端时,继续比较
while ((string1[i] == string2[i]) && string1[i] && string2[i])
i++;
return string1[i] - string2[i]; //当两个字符串指向的字符不一样或者到达终点时返回差值
}

一个简单的while循环就能达到目的

3.strcpy函数

字符串拷贝函数,将后一个字符串拷贝到前一个字符串中,我们需要保证目的地足够大

void my_strcpy(char string1[50], char string2[]) {
int i = 0;
while (string1[i++] = string2[i++]);
}
//这里利用了赋值表达式的特性,直接进行赋值,当string[i]为\0时赋值完循环自动停止
//当然这个程序并不是完美的,根据strcpy的返回值我们还可以这样修改
char* my_strcpy(char string1[50], char string2[]) {
int i = 0;
while (string1[i++] = string2[i++]);
return string1;
}//返回目的地的起始地址

4.strcat函数

strcat字符串追加,在一个字符串之后追加一个新的字符串,如果以strcpy的角度理解就是以第一个字符串的\0位置为起始地址进行字符串拷贝,那么接下来就很简单了

char* my_strcat(char string1[50], char string2[]) {
int i = -1;
while (string1[++i]);//循环停止时i指向\0
int j = 0;
while (string1[i++] = string2[j++]); //与strcpy同理
return string1;
}

5.strupr函数

strupr字符串大写函数,将所有字符串中的小写字母都变成大写,我们只需要根据ASCII值就可以简单实现

char*my_strupr(char string[]) {
int i = 0;
while (string[i]) {       //当string[i]指向\0时循环停止
if (string[i] >= 'a' && string[i] <= 'z')
string[i] -= 32;
i++;
}
return string;
}

6.strlwr函数

和strupr对应,这是字符串小写函数,把大写转成小写,只需要对上面的代码简单一改就可以

char*my_strlwr(char string[]) {
int i = 0;
while (string[i]) {       //当string[i]指向\0时循环停止
if (string[i] >= 'A' && string[i] <= 'Z')
string[i] += 32;
i++;
}
return string;
}

来源:https://blog.csdn.net/weixin_62753802/article/details/122269533

标签:C语言,字符串,函数
0
投稿

猜你喜欢

  • Java躲不过设计模式的坑之代理模式详解

    2023-07-10 05:52:07
  • MyBatis一对多嵌套查询的完整实例

    2023-07-12 02:49:56
  • DataGridView不显示最下面的新行、判断新增行、删除行操作

    2022-11-26 16:14:36
  • Java的外部类为什么不能使用private和protected进行修饰的讲解

    2023-06-29 00:45:57
  • C#装箱和拆箱操作实例分析

    2021-10-25 13:17:36
  • ADO.NET实体数据模型详细介绍

    2023-10-16 12:15:41
  • C#使用读写锁三行代码简单解决多线程并发的问题

    2023-08-16 12:15:39
  • C# Math中常用数学运算的示例详解

    2023-10-06 23:06:28
  • Java Socket使用加密协议进行传输对象的方法

    2023-11-28 12:47:44
  • 一篇文章带你入门Java Script

    2023-09-12 06:09:24
  • Android Handler机制详解原理

    2023-10-29 22:03:44
  • Java编程实现中英混合字符串数组按首字母排序的方法

    2022-03-16 02:34:54
  • 基于Java实现Actor模型

    2021-12-11 09:28:50
  • Java事务管理学习之Spring和Hibernate详解

    2023-04-11 00:01:25
  • Java MyBatis本地缓存原理详解

    2023-01-30 18:20:36
  • mybatis like模糊查询特殊字符报错转义处理方式

    2023-09-02 21:14:54
  • Spring JPA之find拓展方法示例详解

    2021-12-11 03:50:49
  • C#中应用程序集的装载过程详解

    2023-03-30 19:06:05
  • Spring MVC全局异常实例详解

    2021-11-19 13:51:26
  • Java用递归方法解决汉诺塔问题详解

    2022-11-23 03:11:40
  • asp之家 软件编程 m.aspxhome.com