编程之路,从0开始:字符函数和字符串函数
Hello大家好!很高兴我们又见面了!
给生活添点passion,开始今天的编程之路!
目录
1、字符分类函数
2、字符转换函数
3、字符串函数
1、 strcpy
2、 strcat
3、 strcmp
4、strlen(s)
5、strstr(s1, s2)
6、 strtok(s1, s2)
1、字符分类函数
字符分类函数 如果符合就返回真
iscntrl 任何控制字符
isspace 空白字符
isdigit 十进制0到9
isxdigit 十六进制
islower 小写字母
isupper 大写字母
isalpha 字母
isalnum 字母或者数字
ispunct 标点符号
isgraph 任何图形字符
isprint 任何可打印字符
以上是字符分类函数的作用
2、字符转换函数
toupper() 函数将小写字母转换为大写字母。
tolower()函数将给定的字符转换成小写字母。
3、字符串函数
在C语言中给定的字符串函数很多:
1. strcpy(s1, s2):复制字符串,将s2复制到s1。
2. strncpy(s1, s2, n):复制字符串,将s2的前n个字符复制到s1。
3. strcat(s1, s2):连接字符串,将s2连接到s1的末尾。
4. strncat(s1, s2, n):连接字符串,将s2的前n个字符连接到s1的末尾。
5. strcmp(s1, s2):比较字符串,比较s1和s2,返回值表示s1和s2的字典顺序,大于0则s1在前。
6. strncmp(s1, s2, n):比较字符串,比较s1和s2的前n个字符。
7. strlen(s):计算字符串长度,返回s的长度,不包括结尾的空字符。
8. strchr(s, c):查找字符,返回指向s中第一次出现c的指针。
9. strrchr(s, c):查找字符,返回指向s中最后一次出现c的指针。
10. strstr(s1, s2):查找子串,返回指向s1中第一次出现s2的指针。
11. strtok(s1, s2):分割字符串,使用s2中的分隔符分割s1。
12. strtok_r(s1, s2, p):分割字符串,线程安全的版本。
13. strdup(s):复制字符串,动态分配内存并复制s。
14. strndup(s, n):复制字符串,动态分配内存并复制s的前n个字符。
15. strcoll(s1, s2):比较字符串,使用当前区域设置比较s1和s2。
16. strxfrm(s1, s2):转换字符串,转换s2以便使用strcoll比较。
这些字符串函数都包含在头文件string.h中
这里我们简单介绍几个常用的函数,并对他们进行模拟实现:
1、 strcpy
复制字符串,将s2复制到s1。
函数原型:
使用:
#include<stdio.h>
#include<stdio.h>
int main()
{
char a[20] = "ADD";
char b[20] = {0};
strcpy(b,a);
printf("%s",b);
return 0;
}
模拟实现:
#include<stdio.h>
void My_strcpy(char *a,char *b)
{
int i = 0;
int* c = b;
while (a[i] != '\0')
{
*(b+i) = *(a+i);
i++;
}
}
int main()
{
char a[20] = "asdasd";
char b[20] = {0};
My_strcpy(a,b);
printf("%s",b);
return 0;
}
2、 strcat
连接字符串,将s2连接到s1的末尾。
函数原型:
使用:
#include<stdio.h>
#include<stdio.h>
int main()
{
char a[20] = "GET SOME";
char b[20] = " PASSION";
strcat(a,b);
printf("%s",a);
return 0;
}
模拟实现:
#include<stdio.h>
void My_strcat( char *a,const char *b)
{
int i = 0;
while (*a!='\0')
{
a++;
}
while (*a = *b)
{
a++;b++;
}
}
int main()
{
char a[20] = "ADD";
char b[20] = "PASSION";
My_strcat(a,b);
printf("%s",a);
return 0;
}
3、 strcmp
比较字符串,比较s1和s2,返回值表示s1和s2的字典顺序,大于0则s1在前。
使用:
#include<stdio.h>
#include<stdio.h>
int main()
{
char a[20] = "GET SOME";
char b[20] = " PASSION";
if (strcmp(a, b) > 0)
{
printf("%s", a);
}
return 0;
}
模拟实现:
#include<stdio.h>
int My_strcmp(const char *a,const char *b)
{
int i = 0;
int* c = b;
while (*a==*b)
{
if (*a == '\0')
{
return 0;
}
a++;b++;
}
return *a - *b;
}
int main()
{
char a[20] = "asdasd";
char b[20] = "asa";
int ret=My_strcmp(a,b);
printf("%d",ret);
return 0;
}
4、strlen(s)
计算字符串长度,返回s的长度,不包括结尾的空字符。
使用:前面已经多次使用了,这里不再举例。
模拟实现:
#include<stdio.h>
int My_strlen(char *arr)
{
int i = 0;
int len = 0;
for (i = 0;arr[i] != '\0';i++)
{
len++;
}
return len;
}
int main()
{
char a[]="asdasd";
int len = My_strlen(a);
printf("%d",len);
return 0;
}
5、strstr(s1, s2)
查找子串,返回指向s1中第一次出现s2的指针。
使用:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
char a[20] = "PASSION";
char b[20] = "SS";
char* c = strstr(a, b);
printf("%s",c);
return 0;
}
模拟实现:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
char *Mystrstr(const char a[], char* p)
{
char* str = (char*)a;
char* i=a;
char* j = p;
if (!*p)
{
return a;
}
while (*str)
{
i = str;
j = (char*)p;
while (*i && *j && (*i == *j))
{
i++;
j++;
}
if (!*j)
{
return str;
}
str++;
}
return (NULL);
}
int main()
{
char a[20] = "asdfghjkl";
char* ret = Mystrstr(a,"dfg");
printf("%s",ret);
return 0;
}
6、 strtok(s1, s2)
分割字符串,使用s2中的分隔符分割s1。
使用:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
char str[100] = "- This, a sample string.";
char* pch = strtok(str, " ,.-");
//将地址保存到遇到停止符之前,打印到遇到下一个停止符的时候
printf("%s\n",pch);
//pch = strtok(NULL, " ,.-");
//第二次使用这个函数就将第一个参数换位NULL
return 0;
}
这个函数有点复杂,就不模拟实现了hhh~
今天的内容就分享到这,欢迎订阅我们的专栏:编程之路,获取更多高质量内容!