3.2 字符串函数的实现
来源:互联网 发布:spss19.0软件 编辑:程序博客网 时间:2024/05/22 14:09
1. strlen
需要引入 string.h 头文件
#include <string.h>
1.1 使用strlen
size_t strlen(const char *s);
返回 s 的字符串长度(不包括结尾的 \0)
#include<stdio.h>#include<string.h>int main(int argc,char const *argv[]){ char line[] = "Hello"; printf("strlen=%d\n", strlen(line)); // strlen=5 printf("sizeof=%d\n", sizeof(line)); // sizeof=6 return 0;}
1.2 自定义mylen
#include<stdio.h>#include<string.h>size_t mylen(const char* s){ int index = 0; while(s[index] != '\0'){ index++; } return index;}int main(int argc,char const *argv[]){ char line[] = "Hello"; printf("strlen=%d\n", strlen(line)); // strlen=5 printf("sizeof=%d\n", sizeof(line)); // sizeof=6 printf("mylen=%d\n", mylen("Hello")); // mylen=5 return 0;}
2. strcmp
- int strcmp(const char *s1, const char *s2);
- 比较两个字符串,返回
- 0:s1 == s2
- 1:s1 > s2
- -1:s1 < s2
2.1 使用strcmp
#include<stdio.h>#include<string.h>int main(int argc,char const *argv[]){ char s1[] = "abc"; // s1 存的是 abc\0 char s2[] = "abc"; printf("%d\n", s1 == s2); // 0 s1==s2 比较的是地址 printf("%d\n", strcmp(s1, s2)); // 0 strcmp 比较的是ASCII码值,空格的 ASCII是32,\0的ASCII码值是 0 char s3[] = "bbc"; printf("%d\n", strcmp(s1, s3)); // -1 char s4[] = "Abc"; printf("%d", strcmp(s1, s4)); // 1 return 0;}
2.2 自定义mycmp
#include<stdio.h>#include<string.h>int mycmp1(const char *s1, const char *s2){ int index = 0; while(1){ if(s1[index] != s2[index]) { break; } else if( s1[index] == '\0') { break; } index++; } return s1[index] - s2[index]; } int mycmp2(const char *s1, const char *s2){ int index = 0; while(s1[index] == s2[index] && s1[index] != '\0'){ index++; } return s1[index] - s2[index];}int mycmp(const char* s1, const char* s2){ while(*s1 == * s2 && *s1 != '\0'){ s1++; s2++; } return *s1 - *s2;}int main(int argc,char const *argv[]){ char s1[] = "abc"; char s2[] = "ab"; printf("%d\n", mycmp(s1, s2)); // 99 char s3[] = "Abc"; printf("%d\n", mycmp(s1, s3)); // 32 printf("%d\n", 'a' - 'A'); // 32 return 0;}
3. strcpy
- char* strcpy(char *restrict des, const char *restrict src);
- 把 src 拷贝到 des
- restrict 表明 des 和 src 不重叠(C99),多核复制时 重叠会出错
- 返回des
3.1 使用 strcpy
#include<stdio.h>#include<stdlib.h>#include<string.h>int main(int argc,char const *argv[]){ char src[] = "Hello"; char *dst = (char*)malloc(strlen(src) + 1); strcpy(dst, src); printf("%c\n", dst[0]); return 0;}
3.2 自定义 mycpy
#include<stdio.h>#include<string.h>char* mycpy1(char *dst, const char *src){ int index = 0; while(src[index]){ dst[index] = src[index]; index++; } dst[index] = '\0'; return dst;}char* mycpy2(char* dst, const char* src){ while(*src != '\0'){ *dst = *src; dst++; src++; } *dst = '\0'; return dst;}char* mycpy3(char* dst, const char* src){ char* ret = dst; while(*src != '\0'){ *dst++ = *src++; } *dst = '\0'; return ret;}char* mycpy(char* dst, const char* src){ char* ret = dst; while(*dst++ = *src++){ ; } *dst = '\0'; return ret;}int main(int argc,char const *argv[]){ char s1[] = "Hello"; char s2[10]; mycpy(s2, s1); printf("%c\n", s2[1]); // e return 0;}
4. strchr 与 strrchr
- char* strchr(const char *s, int c); // 查找某字符在字符串中首次出现的位置
- char * strrchr(const char *str, int c); // 函数用于查找某字符在字符串中最后一次出现的位置
- 返回NULL表示没用找到
4.1 使用strchr 与 strrchr
#include<stdio.h>#include<string.h>int main(int argc,char const *argv[]){ char s[] = "Hello"; char *p = strchr(s, 'l'); printf("%s\n", p); // llo printf("%s\n",strrchr(s, 'l')); // lo 查找最后一个 l // 查找第2个 l char s1[] = "Helllo"; char *q = strchr(s1, 'l'); q = strchr(q + 1, 'l'); printf("%s\n", q); // llo return 0;}
5.strstr 与 strcasestr
- char* strstr(const char *s1, const char *s2); // 查找s2 在s1 中的第一次出现的位置,返回s1的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。s2为空,返回s1
- char* strcasestr(const char *s1, const char *s2); // 忽略大小写,不是标准库函数
#include<stdio.h>#include<string.h>int main(int argc,char const *argv[]){ char s1[] = "HelloWorld---"; char s2[] = "World"; char* ret1 = strstr(s1, s2); printf("%s\n", ret1); // World--- return 0;}
0 0
- 3.2 字符串函数的实现
- 字符串函数的实现
- 字符串函数的实现
- 字符串函数的实现
- 字符串函数的实现
- 字符串函数的实现
- 3.2字符串-各种字符串操作函数的实现
- 关于字符串函数的实现
- 字符串处理函数的实现
- 字符串类函数的实现
- 字符串处理函数的实现
- 字符串函数的自我实现
- 字符串连接函数的实现
- 字符串相关函数的实现
- 字符串处理函数的实现
- 字符串部分函数的实现
- 字符串操作函数的实现
- 实现自己的字符串函数
- 328. Odd Even Linked List
- Tomcat 7服务器线程模型
- input输入后延迟触发事件,
- FileProvider
- Unit 3-Lecture1: Sum & Product
- 3.2 字符串函数的实现
- ZooKeeper的事务日志可视化
- IOS开发NSBundle对象使用详解
- 加载百度地图MapView出现The following classes could not be instantiated
- Java设计模式(观察者模式JDK自带)
- 世界末日
- 0215 HTML学习
- 数据结构与算法分析笔记与总结(java实现)--数组10:数组中只出现一次的数字
- NumberUtils、ArrayUtils和RandomUtils工具类用法