日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無(wú)先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語(yǔ)言 正文

C語(yǔ)言解決字符串中插入和刪除某段字符串問(wèn)題_C 語(yǔ)言

作者:正在努力學(xué)習(xí)的小白袁 ? 更新時(shí)間: 2023-04-07 編程語(yǔ)言

字符串中插入某段字符

核心思想

已知插入字符串的長(zhǎng)度len,將插入的位置的后面的字母統(tǒng)統(tǒng)往后移動(dòng)len個(gè)長(zhǎng)度。

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

我們先定義(注意:這里我不考慮極端的情況,如字符串溢出的問(wèn)題?。?/p>

char arr[50],str[20];//arr是被插入的函數(shù),str是插入的函數(shù)

我們?cè)诖_定幾個(gè)int數(shù)

int index, lens, size, lena,j;

其中index是被插入字符串的位置,lens是str的長(zhǎng)度,lena是arr的長(zhǎng)度,size是arr的index后面要移動(dòng)lens個(gè)長(zhǎng)度

接著我們來(lái)去這str和arr

	gets_s(arr);
	printf("輸入插入的位置和插入的字符串:");
	scanf_s("%d", &index);
	getchar();//清除緩沖區(qū)
	gets_s(str);

于是,我們確定長(zhǎng)度,在確定要將index后面的所有字母都要挪動(dòng)size次,才能有足夠的空間才存入lens的長(zhǎng)度

	lena = strlen(arr);//被 插入字符串個(gè)數(shù)
	lens = strlen(str);//要插入字符串個(gè)數(shù)
	size =lens;//一共要挪動(dòng)的size次數(shù)

我們?cè)俣x一個(gè)變量indexx,作用是輔助作用,等會(huì)就懂了

int indexx = index;

最后我們用二層循環(huán)

for (int i = 0; i < size; i++) {
		for (j = lena; j > indexx; j--) {
			arr[j] = arr[j - 1];//前一個(gè)位置給后一個(gè)賦值
		}
		//因已經(jīng)挪動(dòng)位置了,故indexx和lena都要加1,才能保證第二個(gè)for能循環(huán)lena-indexx次
		//因?yàn)橐矂?dòng)的是index后面的字母
		lena++;//arr長(zhǎng)度要加1
		indexx++;
	}

末尾放結(jié)束語(yǔ)句

arr[lena] = '\0';//結(jié)束字符串

最后插入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() {
	//字符串的插入操作
	int index, lens, size, lena,j;
	char arr[50],str[20];//arr是被插入的函數(shù),str是插入的函數(shù)
	gets_s(arr);
	printf("輸入插入的位置和插入的字符串:");
	scanf_s("%d", &index);
	getchar();//清除緩沖區(qū)
	gets_s(str);
	lena = strlen(arr);//被插入字符串個(gè)數(shù)
	lens = strlen(str);//要插入字符串個(gè)數(shù)
	size =lens;//一共要挪動(dòng)的size次數(shù)
	//用另一個(gè)一個(gè)變量,來(lái)代替這個(gè)變量
	int indexx = index;
	for (int i = 0; i < size; i++) {
		for (j = lena; j > indexx; j--) {
			arr[j] = arr[j - 1];//前一個(gè)位置給后一個(gè)賦值
		}
		//以為已經(jīng)挪動(dòng)位置了,所以indexx和lena都要加1,才能保證第二次第二個(gè)for能循環(huán)lena-index次
		//因?yàn)橐矂?dòng)的是index后面的字母
		lena++;
		indexx++;
	}
	arr[lena] = '\0';//結(jié)束字符串
	//最后給插入str
	int k = 0;
	for (int j = index,k=0; j < index + lens; j++,k++) {
		arr[j] = str[k];
	}
	puts(arr);
	return 0;
}

字符串刪除某段字符串

核心思想

兩層循環(huán),第一層是移動(dòng)的程度,第二層是移動(dòng)的字母?jìng)€(gè)數(shù)

我們先定義一個(gè)字符串 計(jì)算他的長(zhǎng)度

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

確定:

int index,lens,k,movestar;

其中 index是插入位置,movestar是要被移動(dòng)的字母的位置,lens是刪除的長(zhǎng)度

printf("輸入您要?jiǎng)h除的開(kāi)始位置和字符長(zhǎng)度");
	scanf_s("%d %d", &index, &lens);

如果遇到極端情況,則

if (lens + index  > len) {
		printf("刪除長(zhǎng)度過(guò)大!");
		return 0;
	}

?既然要移動(dòng)字母,我們肯定得先知道要移動(dòng)多少個(gè)字母,于是定義res

int res = len - index - lens + 1;//要往前挪動(dòng)的字母?jìng)€(gè)數(shù)

res加1使用為我多減掉了1

就不如說(shuō)我在abcdefg中刪除cd,則index就是3,lens就是2,movesatr就是e的位置,res就是efg這三個(gè)被移動(dòng)的字母

要用兩層循環(huán)

	int lenss = lens;//輔助變量
	for (int i = 0; i < lenss; i++) {
		movestar = index + lens - 1;//要開(kāi)始往前挪動(dòng)字母的所在位置
		for (int j = movestar,k=0; k<res; j++,k++) {
			arr[j - 1] = arr[j];
		}
		arr[--len] = '\0';//置零
		lens--;//因?yàn)閙ovesatr的位置會(huì)改變,所以要-1
	}

來(lái)試一下效果:

完整代碼:?

#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("輸入您要?jiǎng)h除的開(kāi)始位置和字符長(zhǎng)度");
	scanf_s("%d %d", &index, &lens);
	if (lens + index  > len) {
		printf("刪除長(zhǎng)度過(guò)大!");
		return 0;
	}
	int res = len - index - lens + 1;//要往前挪動(dòng)的字母?jìng)€(gè)數(shù)
	int lenss = lens;//輔助變量
	for (int i = 0; i < lenss; i++) {
		movestar = index + lens - 1;//要開(kāi)始往前挪動(dòng)字母的所在位置
		for (int j = movestar,k=0; k<res; j++,k++) {
			arr[j - 1] = arr[j];
		}
		arr[--len] = '\0';
		lens--;
	}
	puts(arr);
    return 0;
}

總結(jié)

原文鏈接:https://blog.csdn.net/l1977831649/article/details/125946135

欄目分類(lèi)
最近更新