• 初始字符串
  • 字符串的内存空间、结束标志
  • sizeof 与 strlen的区别
  • malloc、realloc函数开辟内存空间
  • 字符串常用函数
    • puts、gets函数——输入输出
    • 自定义strcpy、strncpy函数——拷贝
    • 自定义strcat函数——拼接
    • 自定义strcmp函数——比较

初始字符串

#include <stdio.h>
int main() {// p为字符串常量(不可修改)char *p = "hello";// 字符串的占位符:%sprintf("%s\n",p);puts(p);return 0;
}

字符串的内存空间、结束标志

#include <stdio.h>
#include <string.h>
int main() {char p[] = {"hello"};// 6个元素。原因:字符串以"\0"结束,实际字符多一 printf("p的元素个数:%d\n",sizeof(p)/sizeof(char));// 实际个数调用strlen函数:计算字符串个数printf("p的实际个数:%d\n",strlen(p));return 0;
}

sizeof 与 strlen的区别

#include <stdio.h>
#include <string.h>
int main() {char *p = "abc";// 计算一个地址占用的内存空间 printf("sizeof函数:%d\n",sizeof(p));// 计算实际字符串的个数  printf("strlen函数:%d\n",strlen(p));char p1[128] = "abc";// 计算字符数组的大小 printf("sizeof函数:%d\n",sizeof(p1));// 计算实际字符串的个数  printf("strlen函数:%d\n",strlen(p1));return 0;
}

malloc、realloc函数开辟内存空间

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// void *malloc(size_t size);
// void *realloc(void *ptr, size_t size);int main() {char *p;p = (char *)malloc(5);// 字符串的赋值方式。错误赋值:p =  "abcde"strcpy(p,"abcde");puts(p);free(p);// 防止悬挂指针p = NULL;  p = (char *)malloc(5);int len = strlen("abcdefg");int newLen = len - 5;// 扩容内存空间 p = (char *)realloc(p,newLen);p = memset(p,'\0',len);strcpy(p,"abcdefg");puts(p);return 0;
}

字符串常用函数

puts、gets函数——输入输出

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// char *gets(char *str);int main() {char str[128] = {'\0'};puts("输入字符串");gets(str); puts(str);return 0;
}

自定义strcpy、strncpy函数——拷贝

第一步:判断目标、源是否为空
第二步:将源数据放入目标中
第三步:设置返回值

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//  char *strcpy(char *dest, const char *src);
char *myStrcpy1(char *dest,char *src){char *bak = dest;if(src == NULL || dest == NULL)return NULL;while(*src != '\0'){*dest = *src;dest++;src++;}return bak;
}char *myStrcpy2(char *dest,char *src){char *bak = dest;if(src == NULL || dest == NULL)return NULL;while(*src != '\0'){*dest++ = *src++;}return bak;
}char *myStrcpy3(char *dest,char *src){char *bak = dest;if(src == NULL || dest == NULL)return NULL;while( (*dest++ = *src++)  != '\0');return bak;
}char *myStrncpy(char *dest,char *src,int size){char *bak = dest;if(src == NULL || dest == NULL)return NULL;while( (*dest++ = *src++)  != '\0' && size>1){size--;}*dest = '\0';return bak;
}int main() {char *p = "ab1ce2fg3";char str[128] = {'\0'};// myStrcpy1(str,p);// myStrcpy2(str,p);//  myStrcpy3(str,p);myStrncpy(str,p,5);puts(str);return 0;
}

自定义strcat函数——拼接

第一步:判断目标、源是否为空
第二步:将“目标指针”偏移到末尾
第三步:将“源指针”放置在“目标指针”后
第四步:设置返回值

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>// char *strcat(char *dest, const char *src);char *myStrcat(char *dest,char *src){char *bak = dest;assert(src != NULL || dest != NULL);while(*dest != '\0'){dest++;}while(*src != '\0'){dest++;*dest = *src;src++;}*dest = '\0';return bak;
}int main() {char str[128] = {"code"};char *p = "Dog";strcat(str,p);puts(str);myStrcat(str,p);puts(str);return 0;
}

自定义strcmp函数——比较

未解bug:若两个字符串不相等,返回值存在一定问题
本程序返回值,依照ASCII码求和返回1或-1

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>// char *strcmp(char *dest, const char *src);
int myStrcmp(char *s1,char *s2){int flag = 0;char *s1_bak = s1;char *s2_bak = s2;int s1_num = 0;int s2_num = 0;assert(s1!= NULL || s2 != NULL);while(*s1++ && *s2++){if(*s1 != *s2){flag = 1;break;}}if(flag == 0) return 0;s1 = s1_bak;s2 = s2_bak;while(*s1++ != '\0' && *s2++ != '\0'){s1_num += *s1;s2_num += *s2;}if(s1_num < s2_num)return -1;if(s1_num > s2_num)return 1;
}int main() {char *p1 = "cod";char *p2 = "coda";int ret;ret = myStrcmp(p1,p2);printf("myRet = %d\n",ret);ret = strcmp(p1,p2);printf("stdRet = %d\n",ret);return 0;
}

5. C精华——字符串相关推荐

  1. #【精华】 PB根据一串字符串生成拼音码

    #[精华] PB根据一串字符串生成拼音码 //==================================================================== // Event ...

  2. ES6精华:字符串扩展

    1 四字节字符 ES6大幅增强了对4字节(32位)字符的支持. JS内部使用UTF-16编码规则(网页通常为UTF-8). 1字符固定为2字节,1字节为8位(二进制),其码点小于0xFFFF. 有些符 ...

  3. C语言提取PDF字符串,C语言资料精华.pdf

    指针是C语言中广泛使用的一种数据类型.运用指针编程是C语言最主要的风格之一.利用指针变量可以 表示各种数据结构: 能很方便地使用数组和字符串: 并能象汇编语言一样处理内存地址,从而编出精练 而高效的程 ...

  4. Go语言从入门到精通 - 【精华篇】字符串常用方法总结

    Golang 字符串操作小结,字符串函数主要集中在 strings 和 strconv 中,本文介绍使用方法,给出一个函数接口,然后匹配相关example. string包 字符串比较 函数接口 // ...

  5. grep之字符串搜索算法Boyer-Moore由浅入深(比KMP快3-5倍)

    2019独角兽企业重金招聘Python工程师标准>>> 1. 简单介绍 在用于查找子字符串的算法当中,BM(Boyer-Moore)算法是目前被认为最高效的字符串搜索算法,它由Bob ...

  6. java基础知识点_「Java面试题/知识点精华集」20000+字的Java基础知识篇(2020最新版) !

    " 本文已经收录进我的 79K Star 的 Java 开源项目 JavaGuide:https://github.com/Snailclimb/JavaGuide (「Java学习+面试指 ...

  7. ASP 三十二条精华代码

    整理收藏: ASP 三十二条精华代码 1. οncοntextmenu="window.event.returnvalue=false" 将彻底屏蔽鼠标右键 <table b ...

  8. 《博客园精华集》Sharepoint+MOSS分册第2轮筛选结果文章列表

    <博客园精华集>Sharepoint+MOSS分册第2轮筛选结果文章列表 由我筛选完成,MOSS部分一共68篇,Sharepoint部分一共213篇 Sharepoint相对来说学习和使用 ...

  9. ASP 三十条精华代码

    ASP 三十条精华代码 1. οncοntextmenu="window.event.returnvalue=false" 将彻底屏蔽鼠标右键 <table border ο ...

最新文章

  1. conda install和pip install的区别
  2. python3 not 用法
  3. 在线报名竞赛网站java源码_我用Java写出了一个QQ!可在线聊天(附源码)~
  4. myeclips/eclipse配置总结(根据网络整理)
  5. textarea回车不换行 小程序_微信小程序商城到底值得不值得开通?
  6. Java线程类核心方法
  7. 1432: 【蓝桥杯】:剪格子(迷宫问题变体)
  8. 达而稳 驱动 fl2000dx_Intel-AMD核显驱动没人管:Win10无法升级,不要撞车
  9. python爬取股票历史数据_爬取股票历史数据并绘制K线图
  10. HTML5七夕情人节表白网页制作【流星动画3D相册】HTML+CSS+JavaScript
  11. 取消字体许可限制_字体许可和使用:您需要知道的
  12. 【java导出Word模板(FTL文件,含单元格合并)】
  13. 2021知到答案,公共关系与人际交往能力。
  14. walking机器人入门教程-工具-命令管理器
  15. Egencia smartmix航班排名模型背后的运营研究
  16. 曾我爱的人《亲爱的,别跨过那条江》:关于爱你,我准备用一生
  17. neo4j图数据库基本概念
  18. 【webapp】开发手机版WEBAPP MOBILE APP
  19. PICO《轻世界》体验:随心畅玩,洒脱创作,潜力无限
  20. 闲谈swi与ucos

热门文章

  1. GoLang 调用 .so 文件
  2. 面板7.8如何降级到7.7,关闭绕过强制绑定手机账号教程
  3. 基于Log-Structured的FASS 2.0架构设计
  4. CLIP4Clip: An Empirical Study of CLIP for End to End Video Clip Retrieval
  5. 微服务入门篇(二),万字长文带你实操作SpringCloudAlibaba微服务组件
  6. codeforces900D Unusual Sequences
  7. 华硕主板固态硬盘不识别_如果ASUS主板BIOS主板无法识别NVMe m.2 SSD,该怎么办?...
  8. 时域同步平均(TSA)降噪原理
  9. 广告流量反作弊风控中的模型应用
  10. 大数据平台测试-软件测试常见面试回答(持续更新)