網(wǎng)站首頁(yè) 編程語(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
相關(guān)推薦
- 2022-10-18 shell腳本實(shí)現(xiàn)定時(shí)刪除文件或文件夾_linux shell
- 2022-03-31 python多線(xiàn)程方法詳解_python
- 2022-09-16 Pandas數(shù)值排序?sort_values()的使用_python
- 2023-05-22 pytorch的Backward過(guò)程用時(shí)太長(zhǎng)問(wèn)題及解決_python
- 2022-10-13 react-router?v6實(shí)現(xiàn)動(dòng)態(tài)路由實(shí)例_React
- 2023-03-19 Kotlin?WorkManager使用方法詳解_Android
- 2021-11-25 Linux命令unzip詳解_Linux
- 2022-04-19 python使用requests?POST提交一個(gè)鍵多個(gè)值方式_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支