当前位置: 首页 > news >正文

C语言—关于字符串(编程实现部分函数功能)

 0.前言

 当我们使用这些函数功能时,可以直接调用头文件---#include<string.h>,然后直接使用就行了,本文只是手动编写实现函数的部分功能

 1.strlen函数功能实现

功能说明:strlen(s)用来计算字符串s的长度,该函数计数不会包括最后的'\0'

例如:strlen("abcde")就为5

​
#include<stdio.h>
int strlen(char s[])//strlen()函数
{int i;for (i = 0; s[i] != '\0'; i++);return i;
}
int main()
{char s[50];gets(s);printf("%d", strlen(s));return 0;
}​

2.strcpy函数功能实现

功能说明:strcpy(to,from)将from这个字符串复制到to中(想成是to=from,顺序别反了)

例如:to="abc"

           from="i love you"

           通过函数strcpy(to,from),to就为“i love you"了

#include<stdio.h>
void strcpy(char to[],char from[])//strcpy函数
{int i;for (i = 0; from[i] != '\0'; i++)//这个循环里将from这个字符数组除了最后{                                //一个元素'\0'之外的全部元素copy给了toto[i] = from[i];}to[i] = '\0';//记住最后加个'\0'作为字符串结尾
}
int main()
{char from[50],to[50];gets(from);strcpy(to, from);puts(to);return 0;
}

3.strcat函数功能实现

功能说明:strcat(s1,s2)就是将s2字符串接s1字符串后面(同样顺序别反了)

例如:s1="hello"

           s2=" world"(w前有一个空格)

           通过函数strcat(s1,s2),s1就为”hello world"了

#include<stdio.h>void  MyStrcat(char* s1, char* s2)
{int i, j;for (i = 0; *(s1+i) != '\0'; i++);for (j = 0; *(s2+j) != '\0'; j++)//让s2中每一个字符都加进s1中,直到s2结尾为止跳出循环{*(s1+i++) = *(s2+j);}*(s1+i) = '\0';//末尾记得加'\0'作为字符串结尾
}int main()
{char s1[100], s2[50];printf("Input a string:");gets(s1);printf("Input another string:");gets(s2);MyStrcat(s1, s2);printf("Concatenate results:%s\n", s1);return 0;
}

 4.字符串中删除某个字符

功能说明:就是删除s字符串中某个字符a

例如:s="hello world!"

           a='o'

           通过函数Delete(s,a),s就变为了"hell wrld!"

#include<stdio.h>void Delete(char* s,char a)
{int i,j;for(i=0;*(s+i)!='\0';i++){if(*(s+i)==a){for(j=0;*(s+i+j)!='\0';j++)*(s+i+j)=*(s+i+j+1);}}
}int main()
{char s[50];char a;printf("Input a string:");gets(s);printf("Input a character:");scanf("%c",&a);Delete(s,a);printf("Results:%s\n",s);return 0;
}

 5.计算字符串中子串的个数

例如:s1=ahhhhabbbbab

           s2=ab

           通过FindString(s1,s2),计算出子串s2"ab"在字符串s1中出现了2次

#include<stdio.h>int FindString(char* s1, char* s2)
{int i,j,n=0;for (i = 0; *(s1 + i) != '\0'; i++){if (*(s1 + i) == *s2){for (j = 0; *(s2 + j) != '\0'; j++){if (*(s1 + i) != *(s2 + j)) break;i++;}if (*(s2 + j) != '\0') n++;}}return n;
}int main()
{char s1[50], s2[50];gets(s1);gets(s2);int n = FindString(s1, s2);printf("%d", n);
}

http://www.lryc.cn/news/348456.html

相关文章:

  • picoCTF-Web Exploitation-Trickster
  • SSH 免密登录,设置好仍然需要密码登录解决方法
  • 【斑马打印机】web前端页面通过BrowserPrint API连接斑马打印机进行RFID条形码贴纸打印
  • DigitalOcean 应用托管更新:应用端到端运行时性能大幅改进
  • c/c++对于char*的理解(联合string容器)
  • Web前端三大主流框架是什么?
  • 一个基于servlet的MVC项目-登录验证
  • Windows 11 下 kafka 的安装踩坑
  • 二维数组:行列互换/求最大值及其所在位置/求各行各列的和/矩阵乘积/深入理解二维数组
  • The Onion Router-洋葱
  • 自动化工具 Ansible:playbooks 剧本编写
  • AttributeError: module ‘flask.app‘ has no attribute ‘route‘
  • 在云计算与人工智能中,7ECloud扮演着什么样的角色
  • 视频推拉流EasyDSS视频直播点播平台如何优先展示正在直播的直播间?
  • JavaEE之线程(4)——线程安全、线程安全的原因,synchronized关键字
  • Python3 笔记:分支结构
  • 《TAM》论文笔记(上)
  • 【Java的抽象类和接口】
  • 今天开发了一款软件,我竟然只用敲了一个字母(文末揭晓)
  • 【C++杂货铺】红黑树
  • css--控制滚动条的显示位置
  • 华为设备display查看命令
  • 自动攻丝机进出料激光检测 进料出料失败报警循环手动及关闭报警退出无限循环
  • 2024年去除视频水印的5种方法
  • 怎么用电脑接收手机文件 用备忘录传输更舒服
  • 微信小程序、uniapp密码小眼睛
  • 【手势操作-复习前一天的内容-预习今天的内容 Objective-C语言】
  • ​​​【收录 Hello 算法】第 6 章 哈希表
  • rust类型和变量(二)
  • linux学习:多媒体开发库SDL+视频、音频、事件子系统+处理yuv视频源