欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言解決字符串中插入和刪除某段字符串問題

 更新時間:2023年02月06日 09:44:14   作者:正在努力學(xué)習(xí)的小白袁  
這篇文章主要介紹了C語言解決字符串中插入和刪除某段字符串問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

字符串中插入某段字符

核心思想

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

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

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

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

我們在確定幾個int數(shù)

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();//清除緩沖區(qū)
	gets_s(str);

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

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

我們再定義一個變量indexx,作用是輔助作用,等會就懂了

int indexx = index;

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

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

末尾放結(jié)束語句

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);//被插入字符串個數(shù)
	lens = strlen(str);//要插入字符串個數(shù)
	size =lens;//一共要挪動的size次數(shù)
	//用另一個一個變量,來代替這個變量
	int indexx = index;
	for (int i = 0; i < size; i++) {
		for (j = lena; j > indexx; j--) {
			arr[j] = arr[j - 1];//前一個位置給后一個賦值
		}
		//以為已經(jīng)挪動位置了,所以indexx和lena都要加1,才能保證第二次第二個for能循環(huán)lena-index次
		//因為要挪動的是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),第一層是移動的程度,第二層是移動的字母個數(shù)

我們先定義一個字符串 計算他的長度

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;
	}

 既然要移動字母,我們肯定得先知道要移動多少個字母,于是定義res

int res = len - index - lens + 1;//要往前挪動的字母個數(shù)

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

就不如說我在abcdefg中刪除cd,則index就是3,lens就是2,movesatr就是e的位置,res就是efg這三個被移動的字母

要用兩層循環(huán)

	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
	}

來試一下效果:

完整代碼: 

#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;//要往前挪動的字母個數(shù)
	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);
    return 0;
}

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++實(shí)現(xiàn)LeetCode(211.添加和查找單詞-數(shù)據(jù)結(jié)構(gòu)設(shè)計)

    C++實(shí)現(xiàn)LeetCode(211.添加和查找單詞-數(shù)據(jù)結(jié)構(gòu)設(shè)計)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(211.添加和查找單詞-數(shù)據(jù)結(jié)構(gòu)設(shè)計),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • vscode+qt5+cmake編譯調(diào)試過程解析

    vscode+qt5+cmake編譯調(diào)試過程解析

    這篇文章主要介紹了vscode+qt5+cmake編譯調(diào)試過程解析,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • EasyC++內(nèi)部鏈接性和無鏈接性

    EasyC++內(nèi)部鏈接性和無鏈接性

    這篇文章主要介紹了EasyC++內(nèi)部鏈接性和無鏈接性,當(dāng)我們使用static關(guān)鍵字,將變量的作用于限制在整個文件時,該變量的鏈接性為內(nèi)部鏈接性,然而無鏈接性的變量其實(shí)就是在代碼塊當(dāng)中使用static關(guān)鍵字創(chuàng)建的,接下來一起進(jìn)入文章了解更多內(nèi)容吧
    2021-12-12
  • Qt如何實(shí)現(xiàn)輸入框@聯(lián)系人的@檢測的示例

    Qt如何實(shí)現(xiàn)輸入框@聯(lián)系人的@檢測的示例

    本文主要介紹了Qt如何實(shí)現(xiàn)輸入框@聯(lián)系人的@檢測的示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • C語言從基礎(chǔ)到進(jìn)階全面講解數(shù)組

    C語言從基礎(chǔ)到進(jìn)階全面講解數(shù)組

    數(shù)組是一組有序的數(shù)據(jù)的集合,數(shù)組中元素類型相同,由數(shù)組名和下標(biāo)唯一地確定,數(shù)組中數(shù)據(jù)不僅數(shù)據(jù)類型相同,而且在計算機(jī)內(nèi)存里連續(xù)存放,地址編號最低的存儲單元存放數(shù)組的起始元素,地址編號最高的存儲單元存放數(shù)組的最后一個元素
    2022-05-05
  • C++名稱空間特性

    C++名稱空間特性

    這篇文章主要介紹了C++名稱空間特性,文章圍繞C++名稱空間特性的相關(guān)資料展開詳細(xì)內(nèi)容,需要的小伙伴可以參考一下下文具體內(nèi)容,希望對你的學(xué)習(xí)有所幫助
    2022-01-01
  • C++進(jìn)一步認(rèn)識類與對象

    C++進(jìn)一步認(rèn)識類與對象

    類是創(chuàng)建對象的模板,一個類可以創(chuàng)建多個對象,每個對象都是類類型的一個變量;創(chuàng)建對象的過程也叫類的實(shí)例化。每個對象都是類的一個具體實(shí)例(Instance),擁有類的成員變量和成員函數(shù)
    2021-10-10
  • 詳解C++11 變參模板

    詳解C++11 變參模板

    這篇文章主要介紹了C++11 變參模板的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)c++11,感興趣的朋友可以了解下
    2020-08-08
  • C語言學(xué)生成績管理系統(tǒng)源代碼

    C語言學(xué)生成績管理系統(tǒng)源代碼

    這篇文章主要為大家詳細(xì)介紹了C語言學(xué)生成績管理系統(tǒng)源代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • QT中QByteArray與char、int、float之間的互相轉(zhuǎn)化

    QT中QByteArray與char、int、float之間的互相轉(zhuǎn)化

    本文主要介紹了QT中QByteArray與char、int、float之間的互相轉(zhuǎn)化,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05

最新評論