文章目录

  • 一、字符串
  • 二、删除指定的字符
  • 三、从母串中截取子串
  • 四、输入位置截取子串

本篇主要介绍C语言字符串中的相关操作,然后分析两个C语言实例——在母串中指定删除子串、在母串中截取子串

一、字符串

了解C 语言的都知道,C语言中没有字符串类型,所以C语言是用字符串常量、字符指针、字符数组来表示字符串。这些字符串都是以 NULL、’\0’或者ASCII==0来结尾。说白了就是一个个字符组成一串有序序列,就是C语言中的字符串了。
1、字符串常量:
字符串常量是不可被修改的,它的定义方法是这样的:

#define N "hello"

用一对双引号(" ")括起的一串字符来表示字符串常量,如上面的"hello"

2、字符指针表示字符串:

char *message = "Hello World!";

遍历字符指针

while(*message != '\0'){printf("%c ",*message++);}

3、字符数组:
字符串还可以存储于字符数组或动态分配的内存中。定义一个字符数组和定义一个普通数组一样,不同的是字符数组中存放的是字符数据而已
定义字符数组

char charArray[] = "Hello World!";    // 声明并初始化一个字符数组

遍历字符数组

for(i = 0; i < len; i++)
{if( str[i] <= 'z' && str[i] >= 'a'){str[i] = str[i] - 32;}
}

以上都C语言字符串的基本概念,下面分享两个实例

二、删除指定的字符

1、分析:
(1)我们需要写一个函数来删除指定的字符串,所以重点就在这个函数上;
(2)在函数中,需要用一个循环来遍历母串中的所有字符,循环中将遍历到的字符与输入的字符进行比较;
(3)如果找到了就删除它,其实就是将后续的字符往前覆盖
(4)核心算法:

while(str[i] != '\0'){if(str[i] == c)               //找到需要删除的字符了 {for(j=i; str[j]!='\0'; j++) {str[j]= str[j+1];        //从该字符被覆盖后,后续字符依次往前覆盖 }}else i++;}

2、参考结果:

3、参考代码:

#include <stdio.h>
void CharDelete(char *str, char c);void main()
{char s[100];char c;printf("请输入一个字符串:");gets(s);printf("请输入需要删除的字符:");c= getchar();CharDelete(s, c);printf("删除后的字符串为:%s",s);
} void CharDelete(char *str, char c)
{int i=0, j;while(str[i] != '\0'){if(str[i] == c)             //找到需要删除的字符了 {for(j=i; str[j]!='\0'; j++) {str[j]= str[j+1];        //从该字符被覆盖后,后续字符依次往前覆盖 }}else i++;}
}

三、从母串中截取子串

1、分析:
(1)需要用一个循环来遍历母串中的所有字符,然后用子串的第一个字符与母串中遍历的每一个字符进行比较;
(2)如果相同的话,就开始遍历子串,同时外部循环又在遍历母串,这样就能动态将母串与子串的各个字符对应比较;
(3)如果在遍历子串中,有一个字符不相等,就跳出遍历;
(4)如果将子串全部遍历完了,说明母串中的这一段,就是与子串完全相同的,这样就可以进行删除操作了;
(5)所谓删除,就是将不需要删的部分存入一个新的字符串,所以需要提前定义一个新的字符数组或者字符指针

2、参考结果:

3、参考代码:

#include <stdio.h>
#include <string.h>main()
{int i,j=0,k,n2;char strings[100],s[20],new[100];  //子串s,母串strings, 新串new printf("输入母串:\n");gets(strings);printf("输入要删除的子串:\n");gets(s);k=0;n2=strlen(s);  //记录子串的长度 //遍历母串,然后在母串种遍历子串 for(i=0,k=0;strings[i];i++){if(strings[i]==s[0]){while(s[j]){if(s[j++]!=strings[i++])  //将子串遍历一遍 {break;  //一旦有个字符不同就跳出对子串的遍历 }}//如果子串全部遍历完了,那就说明子串的这部分不需要存在,//直接将母串的后续字符加到新串中 ,并且回到对母串的遍历中 if(j==strlen(s)){new[k++] = strings[i];continue;}}new[k++] = strings[i];  //正常情况就直接将每个字符都存到新串里 }puts(new);
}

四、输入位置截取子串

1、分析:
(1)先用变量标记好用户输入的位置;
(2)然后从开始截取的位置开始往后遍历母串

2、参考结果:

3、参考代码:

#include <stdio.h>
#include <string.h>
void SubStr(char *str1, char *str2, int m, int n);      //原始字符串,截取的子串,开始截取的位置,截取个数 int main()
{char s1[100], s2[100];int m, n;printf("请输入一个字符串:\n");gets(s1);printf("请输入需要截取的位置:\n");scanf("%d",&m);m=m-1;       //减 1 为了得到正确的下标 printf("请输入截取字符的个数:\n");scanf("%d",&n);SubStr(s1, s2, m, n);printf("截取的子串为:\n%s",s2);
} void SubStr(char *str1, char *str2, int m, int n)
{int i;if(strlen(str1) <m){str2[0]= '\0';     //子串大于原始字符串,则直接结束(封装)return;              //无值返回主函数 }for(i=m; (i<m+n)&&(str1[i]!='\0'); i++)            //从开始截取的位置开始往后遍历 {str2[i-m]= str1[i];}str2[i-m]= '\0';
}

(篇八)C语言在母串删子串、输入位置截取子串相关推荐

  1. python截取子串_python字符串截取子串

    在python中没有类似sub()或者subString()的方法,但是字符串的截取操作却是更加简单. 只需要把字符串看作是一个字符数组,截取子串非常方便. 多余的话就不啰嗦了,看下面的例子就明白了. ...

  2. c语言怎么同时输入两个字符,解决C语言中使用scanf连续输入两个字符类型的问题...

    昨天用C编程,遇到一个关于scanf的细节问题,假如运行如下程序: #include int main() { char ch1,ch2; printf("Input for ch1:/n& ...

  3. C语言 PTA 统计子串在母串出现的次数

    统计子串在母串出现的次数 编写一个函数,该函数可以统计一个长度为3的字符串在另一个字符串中出现的次数.例如,假定输入的字符串为:asdasasdfgasdaszx67asdmklo,字符串为:asd, ...

  4. 查找子串在母串中的位置、编写一个函数实现字符串拼接【数据结构实验报告算法详解】

    文章目录 一.查找子串在母串中的位置 二.一个实现字符串拼接的函数 一.查找子串在母串中的位置 #include<iostream> using namespace std;int Sea ...

  5. 求子串在母串中出现的次数(C++)

    问题描述: 求一个子串在母串中出现的次数. (1)思路: 1.用一个外循环,来遍历母串. 2.指定两个指针p.q分别指向子串的首地址和母串的首地址: 3.如果*p==q,则{ p++;q++; } 否 ...

  6. C实现-统计子串在母串中出现的次数(具体)

    代码实现  思想:每一个循环取子串字符分别与母串字符比较,然后后移,记录母串中有多少个连续字符与子串字符相同.(程序中已详细注释,这里不再重复讲解) //导入头文件 #include<stdio ...

  7. 序列划分c语言,一篇“get”C语言八大排序算法

    如果说各种编程语言是程序员的招式,那么数据结构和算法就相当于程序员的内功. 想写出精炼.优秀的代码,不通过不断的锤炼,是很难做到的. 二.八大排序算法 排序算法作为数据结构的重要部分,系统地学习一下是 ...

  8. c语言 替换字符串中的子串,字符串中的子串替换

    在很多编程语言中,都封装了字符串替换的操作,那么我们这里自己用C语言来实现一个字符串替换的函数.具体需求为:Replace(String S,String T,String V),用V替换主串S中出现 ...

  9. 以串结构存储c语言版,数据结构C语言版 串的块链存储表示和实现

    <数据结构C语言版 串的块链存储表示和实现>由会员分享,可在线阅读,更多相关<数据结构C语言版 串的块链存储表示和实现(13页珍藏版)>请在人人文库网上搜索. 1.*数据结构C ...

最新文章

  1. 131. 直方图中最大的矩形【单调栈】
  2. 跟我一起学.NetCore之MVC过滤器,这篇看完走路可以仰着头走
  3. Linux文件IO-例会笔记总结
  4. EF架构~了解一下,ADO.NET Entity Framework
  5. python去年软件排行_2017年编程语言排行榜,Python位居榜首(C语言需求最大)
  6. 前端开发 容器标签 0226
  7. zookeeper教程,docker 安装,命令,python操作zookeeper,分布式队列,分布式锁
  8. java plus in_mybatis plus in方法使用详解
  9. 2022年高压电工模拟考试及高压电工复审模拟考试
  10. python 文件对话框 颜色对话框_PyQt5系列教程(9):颜色、字体、打开文件对话框...
  11. java 接口怎么规范属性_JAVA命名规范
  12. termux无法安装引导程序包_安卓神器termux之二——文本编辑器篇
  13. 数字图像处理课程作业1-大米检测
  14. 协调器周期性以广播的形式向终端节点发送数据(每隔5s广播一次),终端节点接收数据后,使开发板上的LED灯状态翻转, 同时向协调器发送字符串“EndDevice1 received!”(按组网节点数编号
  15. 什么是软件测试?进行软件测试的目的是什么?
  16. 《名利场》:微软 “ 失落的十年”
  17. 算法-狄克斯特拉算法
  18. java实现分页功能(一)
  19. 微果I7随身便携投影仪好不好用?和哈趣H1相比哪个更值得入手?
  20. 每个人小时候都有一个小小的梦

热门文章

  1. ionic4 返回键退出app
  2. Spring MVC No converter found for return value of type
  3. linux比windows更快吗,linux比windows快很多倍除了算法的优势 有没C比C++快的原因?
  4. python构造数组并命名_Numpy数组追加命名列
  5. android 异步图片加载 开源,异步加载图片BitmapFun分析
  6. sql无法写入mysql_windows7 sqlserver2012 无法写入受保护的内存 解决办法
  7. python语言程序的特点_《Python语言程序设计》 —1.1.3 Python的特点及应用领域...
  8. android底部导航栏选中动画,Android选中突出背景效果的底部导航栏功能
  9. java list树 广度_java树的广度优先遍历思路
  10. 杨氏模量_用作癌症放疗定位膜的交联聚己内酯的结晶度与杨氏模量之间的关系研究|Global Challenges...