开发者

C语言解决字符串中插入和删除某段字符串问题

开发者 https://www.devze.com 2023-02-06 11:06 出处:网络 作者: 正在努力学习的小白袁
目录字符串中插入某段字符核心思想字符串删除某段字符串核心思想总结字符串中插入某段字符
目录
  • 字符串中插入某段字符
    • 核心思想
  • 字符串删除某段字符串
    • 核心思想
  • 总结

    字符串中插入某段字符

    核心思想

    已知插入字符串的长度len,将插入的位置的后面的字母统统往后移动len个长度。

    最后将插入的字符串插入到被插入的字符串。

    我们先定义(注意:这里我不考虑极端的情况,如字符串溢出的问题!)

    char arr[50],str[20];//arr是被插入的函数,str是插入的函数

    我们在确定几个int数

    int index, lens, size, lena,j;

    其中index是被插入字符串的位置,lens是str的长度,lena是arr的长度,size是arr的index后面要移动lens个长度

    接着我们来去这str和arr

    	gets_s(arr);
    	printf("输入插入的位置和插入的字符串:");
    	scanf_s("%d", &index);
    	getchar();//清除缓冲区
    	gets_s(str);

    于是,我们确定长度,在确定要将index后面的所有字母都要挪动size次,才能有足够的空间才存入lens的长度

    	lena = strlen(arr);//被 插入字符串个数
    	lens = strlen(str);//要插入字符串个数
    	size =lens;//一共javascript要挪动的size次数

    我们再定义一个变量indexx,作用是辅助作用,等会就懂了

    int indexx = index;

    最后我们用二层循环

    for (int i = 0; i < size; i++) {
    		for (j = lena; j > indexx; j--) {
    			arr[j] = arr[j - 1];//前一个位置给后一编程个赋值
    		}
    		//因已经挪动位置了,故indexx和lena都要加1,才能保证第二个for能循环lena-indexx次
    		//因为要挪动的是index后面的字母
    		lena++;//arr长度要加1
    		indexx++;
    	}

    末尾放结束语句

    arr[lena] = '\0';//结束字符串

    最后插入str

    //最后给插入str
    	int k = 0;
    	for (int j = index,k=0; j < index + lens; j++,k++) {
    		arr[j] = str[k];
    	}
    	puts(arr);

    完整代码:

    #include <stdio.h>
    #include<stdlib.h>
    #include <string.h>
    int main() {
    	//字符串的插入操作开发者_Go入门
    	int index, lens, size, lena,j;
    	char arr[50],str[20];//arr是被插入的函数,str是插入的函数
    	gets_s(arr);
    	printf("输入插入的位置和插入的字符串:");
    	scanf_s("%d", &index);
    	getchar();//清除缓冲区
    	gets_s(str);
    	lena = strlen(arr);//被插入字符串个数
    	lens = strlen(str);//要插入字符串个数
    	size =lens;//一共要挪动的size次数
    	//用另一个一个变量,来代替这个变量
    	int indexx = index;
    	for (int i = 0; i < size; i++) {
    		for (j = lena; j > indexx; j--) {
    			arr[j] = arr[j - 1];//前一个位置给后一个赋值
    		}
    		//以为已经挪动位置了,所以indexx和lena都要加1,才能保证第二次第二个for能循环lena-index次
    		//因为要挪动的是index后面的字母
    		lena++;
    		indexx++;
    	}
    	arr[lena] = '\0';//结束字符串
    	//最后给插入str
    	int k = 0;
    	for (int j = index,k=0; j < index + lens; j++,k++) {
    		arr[j] = str[k];
    	}
    	puts(arr);
    	return 0;
    }

    C语言解决字符串中插入和删除某段字符串问题

    字符串删除某段字符串

    核心思想

    两层循环,第一层是移动的程度,第二层是移动的字母个数

    我们先定义一个字符串 计算他的长度

    char arr[50];
    	gets_s(arr);
    	int len = strlen(arr);

    确定:

    int index,lens,k,movestar;

    其中 index是插入位置,movestar是要被移动的字母的位置,lens是删除的长度

    printf("输入您要删除的开始位置和字符长度");
    	scanf_s("%d %d", &index, &lens);

    如果遇到极端情况,则

    if (lens + index  > len) {
    		printf("删除长度过大!");
    		return 0;
    	}

     既然要移动字母,http://www.devze.com我们肯定得先知道要移动多少个字母,于是定义res

    int res = len - index - lens + 1;//要往前挪动的字母个数

    res加1使用为我多减掉了1

    就不如说我在abcdefg中删除cd,则index就是3,lens就是2,movesatr就是e的位置,res就是ef编程客栈g这三个被移动的字母

    C语言解决字符串中插入和删除某段字符串问题

    要用两层循环

    	int lenss = lens;//辅助变量
    	for (int i = 0; i < lenss; i++) {
    		movestar = index + lens - 1;//要开始往前挪动字母的所在位置
    		for (int j = movestar,k=0; k<res; j++,k++) {
    			arr[j - 1] = arr[j];
    		}
    		arr[--len] = '\0';//置零
    		lens--;//因为movesatr的位置会改变,所以要-1
    	}

    来试一下效果:

    C语言解决字符串中插入和删除某段字符串问题

    完整代码: 

    #include <stdio.h>
    #include <stdlib.h>
    #include<string.h>
    int main() {
    	int index,lens,k,movestar;
    	char arr[50];
    	gets_s(arr);
    	int len = strlen(arr);
    	printf("输入您要删除的开始位置和字符长度");
    	scanf_s("%d %d", &index, &lens);
    	if (lens + index  > len) {
    		printf("删除长度过大!");
    		return 0;
    	}
    	int res = len - index - lens + 1;//要往前挪动的字母个数
    	int lenss = lens;//辅助变量
    	for (int i = 0; i < lenss; i++) {
    		movestar = index + lens - 1;//要开始往前挪动字母的所在位置
    		for (int j = movestar,k=0; k<res; j++,k++) {
    			arr[j - 1] = arr[j];
    		}
    		arr[--len] = '\0';
    		lens--;
    	}
    	puts(arr);
        r编程客栈eturn 0;
    }

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消