C語言解決字符串中插入和刪除某段字符串問題
字符串中插入某段字符
核心思想
已知插入字符串的長度len,將插入的位置的后面的字母統(tǒng)統(tǒng)往后移動len個長度。
最后將插入的字符串插入到被插入的字符串。
我們先定義(注意:這里我不考慮極端的情況,如字符串溢出的問題?。?/p>
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();//清除緩沖區(qū)
gets_s(str);于是,我們確定長度,在確定要將index后面的所有字母都要挪動size次,才能有足夠的空間才存入lens的長度
lena = strlen(arr);//被 插入字符串個數 lens = strlen(str);//要插入字符串個數 size =lens;//一共要挪動的size次數
我們再定義一個變量indexx,作用是輔助作用,等會就懂了
int indexx = index;
最后我們用二層循環(huán)
for (int i = 0; i < size; i++) {
for (j = lena; j > indexx; j--) {
arr[j] = arr[j - 1];//前一個位置給后一個賦值
}
//因已經挪動位置了,故indexx和lena都要加1,才能保證第二個for能循環(huán)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() {
//字符串的插入操作
int index, lens, size, lena,j;
char arr[50],str[20];//arr是被插入的函數,str是插入的函數
gets_s(arr);
printf("輸入插入的位置和插入的字符串:");
scanf_s("%d", &index);
getchar();//清除緩沖區(qū)
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能循環(huán)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;
}
字符串刪除某段字符串
核心思想
兩層循環(huán),第一層是移動的程度,第二層是移動的字母個數
我們先定義一個字符串 計算他的長度
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;//要往前挪動的字母個數
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;//要往前挪動的字母個數
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;
}總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
使用DeepSeek API 結合VSCode提升開發(fā)效率
這篇文章主要介紹了DeepSeek API與Visual Studio Code (VSCode)結合使用,以提升軟件開發(fā)效率,具有一定的參考價值,感興趣的可以了解一下2025-01-01

