C語(yǔ)言如何在字符數(shù)組中插入一個(gè)字符
在字符數(shù)組中插入一個(gè)字符
以前都是照貓畫(huà)虎,一直都沒(méi)有自己親自動(dòng)手嘗試過(guò)。這次親自上陣,把自己的思路盡量理清并完成。
設(shè)計(jì)思路

- 定義一個(gè)字符數(shù)組a和標(biāo)記插入位置的int型變量pos以及插入字符value。
- 再定義一個(gè)數(shù)組b,大小應(yīng)該比a大1(更大當(dāng)然更好),用于pos位后的元素的賦值。
- 賦值,將a中所有元素copy到b。
- 在pos位置前的元素不改動(dòng),pos位置的元素改為value。b[pos]=value;
- 對(duì)于pos位置后的元素:b[pos+1]=a[pos] //此處的pos執(zhí)行自增運(yùn)算
- 數(shù)組b即所得數(shù)組。
問(wèn)題思索
關(guān)于gets(),scanf()緩沖區(qū)的理解:
gets()是以換行符為結(jié)束標(biāo)志的。當(dāng)遇到換行符時(shí),函數(shù)停止讀取,回車(chē)符不會(huì)被載入緩沖區(qū)。scanf()是以\t \n space 為結(jié)束標(biāo)志。
錯(cuò)誤示范:

當(dāng)遇到以上代碼時(shí),請(qǐng)千萬(wàn)不要忘記在輸入字符前加getchar()清除掉緩沖區(qū)中的回車(chē)符。
正確示范:
代碼附錄
#include <stdio.h>
#include <string.h>
//在char數(shù)組中的第pos個(gè)位置添加字符
int main(){
char a[500],b[500];
int pos;
char value;
gets(a);
scanf("%d",&pos);
getchar();
scanf("%c",&value);
for(int i=0; a[i]!='\0'; i++) b[i]=a[i];
b[pos]=value;
for(int i=pos; b[i]!='\0'; i++) b[i+1]=a[i];
puts(b);
} 字符串中插入字符問(wèn)題
由鍵盤(pán)任意輸入一串字符,再輸入一個(gè)字符和一個(gè)位置,將此字符插入在此串字符的這個(gè)位置上。
如:原串為abcdef,插入字符為k,位置為2,新串為abkcdef。
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int length, i, place, cnt=0;
char* str;
char ch;
//為字符獲得足夠的內(nèi)存空間
printf("請(qǐng)輸入這串字符的最大長(zhǎng)度:");
scanf("%d", &length);
str = (char*)malloc(length*sizeof(char)+1);
printf("請(qǐng)輸入這串字符:");
scanf("%s", str);
printf("請(qǐng)輸入你要插入的字符:");
scanf("\n%c", &ch);
printf("請(qǐng)輸入你要插入字符的位置:");
scanf("%d", &place);
//判斷字符串中字符的數(shù)量
while(str[++cnt]);
//向后移位
str[cnt+1] = '\0';
for(i=0; i<cnt-place; ++i){
str[cnt-i] = str[cnt-i-1];
}
str[place] = ch;
printf("新的字符串為:%s\n", str);
free(str);
system("pause");
return 0;
}
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
c++ 網(wǎng)絡(luò)庫(kù)asio的優(yōu)勢(shì)
這篇文章主要介紹了c++ 網(wǎng)絡(luò)庫(kù)asio的優(yōu)勢(shì),幫助大家更好的利用c++開(kāi)發(fā)服務(wù)端程序,感興趣的朋友可以了解下2020-10-10
詳解C++中如何將構(gòu)造函數(shù)或析構(gòu)函數(shù)的訪問(wèn)權(quán)限定為private
這篇文章主要介紹了詳解C++中如何將構(gòu)造函數(shù)或析構(gòu)函數(shù)的訪問(wèn)權(quán)限定為private的方法,文中還解釋了構(gòu)造函數(shù)與虛函數(shù)的區(qū)別,需要的朋友可以參考下2016-03-03
C++中如何調(diào)用C語(yǔ)言的代碼實(shí)現(xiàn)
這篇文章主要介紹了C++中如何調(diào)用C語(yǔ)言的代碼實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
C++?STL標(biāo)準(zhǔn)庫(kù)std::vector擴(kuò)容時(shí)進(jìn)行深復(fù)制原因詳解
我們知道,std::vector之所以可以動(dòng)態(tài)擴(kuò)容,同時(shí)還可以保持順序存儲(chǔ),主要取決于其擴(kuò)容復(fù)制的機(jī)制。當(dāng)容量滿時(shí),會(huì)重新劃分一片更大的內(nèi)存區(qū)域,然后將所有的元素拷貝過(guò)去2022-08-08
C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之隊(duì)列算法詳解
這篇文章介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之隊(duì)列的算法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12

