當前位置:首頁 » 編程語言 » c語言列表替換
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言列表替換

發布時間: 2023-06-30 14:13:14

Ⅰ C語言查找替換字元

#include<stdio.h>
#include<配仿conio.h>
#include<string.h>
#include<stdlib.h>
voidSubstitute(char*pInput,char*pOutput,char*pSrc,char*pDst)
{
char*pi,*po,*p;
intnSrcLen,nDstLen,nLen;
//指向輸入字元串的游動指針.
pi=pInput;
//指向輸出字元串的游動指針.
po=pOutput;
//計算被替換串和替換串的長度.
nSrcLen=strlen(pSrc);
nDstLen=strlen(pDst);
//查找pi指向字元串中第一次出現替換串的位置,並返回指針(找不到則返回null).
p=strstr(pi,pSrc);
if(p)
{
//找到.
while(p)
{
//計算被替換串前邊字元串的長度.
nLen=(int)(p-pi);
//復制到輸出字元串.
memcpy(po,pi,nLen);
memcpy(po+nLen,pDst,nDstLen);
//跳過被替換串.
pi=p+nSrcLen;
//調整指向輸出串的指針位置.
po=po+nLen+nDstLen;
//繼續查找.
p=strstr(pi,pSrc);
}
//復制剩餘字元串.
strcpy(po,pi);
}
else
{
//沒有找到則原樣復制.
strcpy(po,pi);
}
}
intmain(intac,char*av[])
{
if(ac!=5){
printf("程序名要操作的文件新文件查找的字元串替換的字元串 ");
printf("示例:test.exe1.txt2.txthellolove ");
return0;
}
constintMAXSIZES=100;
FILE*fpSrc,*fpDes;
charfilename1[20]="1.txt";
charfilename2[20]="2.txt";
//要求查找的字元串,替換的字元串;
charps[]="hello";
charpd[]="love";
//求取所查找和替換的字元串的長度;
intlen_src=strlen(av[3]);
intlen_des=strlen(av[4]);
//定義存儲字元串緩沖區;很奇怪的一點是,fgets函數不能將字元串寫入動態分配的內存中
/*char*Src_buf=(char*)(sizeof(char)*MAXSIZES);
char*Cpy_buf=(char*)(sizeof(char)*MAXSIZES);
char*Des_buf=(char*)(sizeof(char)*MAXSIZES);*/
charSrc_buf[MAXSIZES]={0};
charCpy_buf[MAXSIZES]={0};
charDes_buf[MAXSIZES]=培耐纖{0};
//打開文件
if((fpSrc=fopen(av[1],"r+"))==NULL)
{
printf("failtoopenthefile1! ");
exit(1);
}
if((fpDes=fopen(av[2],"a+"))==NULL)
{
printf("failtoopenthefile2! ");
exit(1);
}
//進行循環讀取
while(!feof(fpSrc))//判斷文件是否已結束;!feof(fpSrc)
{
畝胡fgets(Src_buf,MAXSIZES,fpSrc);
Substitute(Src_buf,Des_buf,av[3],av[4]);
fputs(Des_buf,fpDes);
printf("%s",Des_buf);
}
fclose(fpSrc);
fclose(fpDes);
system("pause");
return0;
}

Ⅱ C語言如何實現字元之間的替換(打出一列順序,輸出按此順序輸出)

根據你的題意。

第一行輸入是26個字母的指定順序。

第二行輸入是內容字元串。

將內容字元串中的字母按照指定順序替換成對應26個字母原順序的字母。

規則:第一行輸入必須是26個小寫母,且不能重復。

替換後的字元中字母大小寫參照原字元串。

下面是代碼:

#include<stdio.h>

#include<string.h>

#define MAXLEN 100//第二行輸入字元串的最大長度

char *inPutNewOrder();//輸入26個字母的新順序,必須為小寫字母,不能有重復。輸入成功返回字元串,失敗返回NULL

char getNewLetter(char cIn,char newOrder[27]);//獲取字母對應newOrder的原始字母,成功返回字母,失敗返回0

int main()

{

int i;

char *newOrder;//輸入新字母順序

char inputStr[MAXLEN],cIn;

while(1)

{

newOrder=NULL;

while(!newOrder)

newOrder=inPutNewOrder();

memset(inputStr,0,sizeof(char)*MAXLEN);

for(i=0;i<MAXLEN;i++)

{

cIn=getchar();

if(cIn==10)//回車結束輸入

break;

if((cIn>=65 && cIn<=90)||(cIn>=97 && cIn<=122))//如輸入的是字母,對應新字母順序,找到原字母

inputStr[i]=getNewLetter(cIn,newOrder);

else

inputStr[i]=cIn;

}

if(i==MAXLEN)

while ((cIn = getchar()) != EOF && cIn != ' ');

printf("%s ",inputStr);

}


return 0;

}

char *inPutNewOrder()//輸入26個字母的新順序,必須為小寫字母,不能有重復

{

int i=0,j,flag=1;

static char newOrder[27];

char c=0;

memset(newOrder,0,sizeof(char)*27);

while(1)

{

if(newOrder[25]!=0)

break;

c=getchar();

if(c<97 || c>122)//輸入小寫字母以外字元,標識錯誤

flag=0;

for(j=0;flag && j<i;j++)

if(newOrder[j]==c)//輸入重復,標識錯誤

flag=0;

if(!flag)//錯誤,終止輸入

{

printf("輸入格式錯誤!必須為26個小寫字母,且不能有重復,請重新輸入。 ");

while ((c = getchar()) != EOF && c != ' ');

return NULL;

}

newOrder[i]=c;

i++;

}

while ((c = getchar()) != EOF && c != ' ');

return newOrder;

}

char getNewLetter(char cIn,char newOrder[27])//獲取字母對應newOrder的原始字母,成功返回字母,失敗返回0

{

static char letters[]="abcdefghijklmnopqrstuvwxyz";

char c;

int i,flag;//flag=1大寫字母,flag=0是小寫字母

if(cIn>=65 && cIn<=90)//輸入的是大寫字母

c=cIn+32,flag=1;

if(cIn>=97 && cIn<=122)//輸入的是小寫字母

c=cIn,flag=0;

for(i=0;i<26;i++)

if(newOrder[i]==c)//在新序列中匹配大寫字母或小寫字母

{

if(flag)

return letters[i]-32;

else

return letters[i];

}

return 0;

}