c語言字元的替換
⑴ c語言如何替換字元串中的「&」符號
/* 下面的函數可取去除字元串s中指定的字元c_h。在調用該函數時,用delchar(s,'&')即可刪除s中所有的內'&'字元。容*/
char *delchar(char *s, char c_h) {
char *p,*q;
p = s;
while(*p != '\0') {
if(*p == c_h) {
q = p;
while(*q != '\0') {
*q = *(q + 1);
q++;
}
p--;
}
p++;
}
return (s);
}
⑵ 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語言:如何將字元串中指定的字元替換為另一個指定字元
/*功能:將str字元串中的oldstr字元串替換為newstr字元串
*參數:str:操作目標oldstr:被替換者newstr:替換者
*返回值:返回替換之後的字元串
*版本:V0.2
*/
char*strrpc(char*str,char*oldstr,char*newstr){
char bstr[strlen(str)];//轉換緩沖區
memset(bstr,0,sizeof(bstr));
for(int i=0;i<strlen(str);i++){
if(!strncmp(str+i,oldstr,strlen(oldstr))){//查找目標字元串
strcat(bstr,newstr);
i+=strlen(oldstr)-1;
}else{
strncat(bstr,str+i,1);//保存一位元組進緩沖區
}
}
strcpy(str,bstr);
return str;
}
(3)c語言字元的替換擴展閱讀:
c_str函數的返回值是constchar*的,不能直接賦值給char*,所以就需要我們進行相應的操作轉化,下面就是這一轉化過程。
c++語言提供了兩種字元串實現,其中較原始的一種只是字元串的c語言實現。與C語言的其他部分一樣,它在c++的所有實現中可用,我們將這種實現提供的字元串對象,歸為c-串,每個c-串char*類型的。
標准頭文件<cstring>包含操作c-串的函數庫。這些庫函數表達了我們希望使用的幾乎每種字元串操作。
當調用庫函數,客戶程序提供的是string類型參數,而庫函數內部實現用的是c-串,因此需要將string對象,轉化為char*對象,而c_str()提供了這樣一種方法,它返回const char*類型(可讀不可改)的指向字元數組的指針。例:
#include<iostream>
//#include<cstring>
#include<string>//使用頭文件string,否則最後cout<<無法輸出add_to
using namespace std;
int main()
{
string add_to="hello!";
const string add_on="baby";
const char*cfirst=add_to.c_str();
const char*csecond=add_on.c_str();
char*=new char[strlen(cfirst)+strlen(csecond)+1];
strcpy(,cfirst);
strcat(,csecond);
add_to=;
cout<<":"<<<<endl;
delete[];
cout<<"add_to:"<<add_to<<endl;
return 0;
}
例(1)
函數聲明:const char*c_str();
c_str()函數返回一個指向正規C字元串的指針,內容與本string串相同.
這是為了與c語言兼容,在c語言中沒有string類型,故必須通過string類對象的成員函數c_str()把string對象轉換成c中的字元串樣式。
注意:一定要使用strcpy()函數等來操作方法c_str()返回的指針
比如:最好不要這樣:
char*c;
string s="1234";
c=s.c_str();
//c最後指向的內容是垃圾,因為s對象被析構,其內容被處理(糾正:s對象的析構是在s的生命周期結束時,例如函數的返回)
⑷ C語言初學,字元替換
主函數的名字錯了。字母順序反了。
字元串是用數組存儲的。你的str變數定義錯了,應該是charstr[100];
函數調用的寫法也是錯的。調用函數只寫函數名和參數名。而且要寫在最後一個printf語句前面,等你輸入完成了才能調用函數。
strchange(str,c1,c2);
函數聲明則要寫在main函數的前面,不是裡面。
scanf();後要跟一句getchar();取走一個回車或空格字元,否則下一句scanf無法接收到你輸入的字元。
修改後可執行的完整代碼如下
#include<stdio.h>
char*strchange(char*str,charc1,charc2);
main(){
charc1,c2,str[100];
printf("請輸入字元串:");
scanf("%s",str);
getchar();
printf("請輸入要替換的字元:");
scanf("%c",&c1);
getchar();
printf("請輸入被替換為的字元:");
scanf("%c",&c2);
strchange(str,c1,c2);
printf("替換後的字元串為:%s",str);
}
char*strchange(char*str,charc1,charc2){
while(*str){
if(*str==c1){
*str=c2;
}
str++;
}
returnstr;
}
⑸ 求C語言替換字元串中某個字元的函數
#include "stdio.h"
#include "string.h"
void swap(char s[100],char a,char b)/*a為原來要替換的字元,b是替換後的字元*/
{
int i;
for(i=0;i<strlen(s);i++)
{
if(s[i]==a)
{
s[i]=b;
}
}
}
main()
{
char s[100];
char a,b;
int i;
printf("請輸入一個字元串:\n");
gets(s);
printf("\n請輸入要替換的字元和要替換後的字元,用逗號隔開:");
scanf("%c,%c",&a,&b);
swap(s,a,b);
puts(s);
}
⑹ C語言中如何替換一個字元串中的字元
include
<stirng.h>
void
strrpl(char
*s,
const
char
*s1,
const
char
*s2)
{
char
*ptr;
while
(ptr
=
strstr(s,
s1))
/*
如果來在s中找到s1
*/
{
memmove(ptr
+
strlen(s2)
,
ptr
+
strlen(s1),
strlen(ptr)
-
strlen(s1)
+
1);
memcpy(ptr,
&s2[0],
strlen(s2));
}
return
s;
}
int
main()
{
char
*str1="abc",
*str2="a",
*str3="de",
Str0[100];
//如果字元自串很長,100不夠則需要預留更大的空間。
strcpy(Str0,Str1);
strrpl(Str0,
str2,
str3);
printf("%s\n",
Str0);
return
0;
}
⑺ C語言字元串替換
char
*replace(char
*source,
char
*sub,
char
*rep)
{
char
*result;
/*pc1
是復制到結果result掃描指針*/
/*pc2
是掃描
source
輔助指針*/
/*pc3
尋找子串時,為檢查變化中source是否和子串相等,是指向sub掃描指針
*/
/*找到匹配後,為了復制到結果串,是指向rep掃描指針*/
char
*pc1,
*pc2,
*pc3;
int
isource,
isub,
irep;
isub
=
strlen(sub);
/*對比串長度*/
irep
=
strlen(rep);
/*替換串長度*/
isource=
strlen(source);
/*源串長度*/
if(NULL==*sub)
return
strp(source);
/*申請結果串需要空間*/
result
=
(char
*)malloc(((irep>isub)?(float)strlen(source)/isub*irep+1:isource)*sizeof(char));
pc1
=
result;
/*為pc1依次復制結果串每個位元組作準備*/
while(*source
!=
NULL)
{
/*為檢查source和sub是否相等作準備,為pc2,pc3
賦初值*/
pc2
=
source;
pc3
=
sub;
/*
出循環(任)條件是:
*
*pc2
不等於
*pc3
(和子串不相等)
*
pc2
到源串結尾
*
pc3
到源串結尾
(此時,檢查了全部子串,source處和sub相等)
*****************************************************/
while(*pc2==*pc3
&&
*pc3
!=
NULL
&&
*pc2
!=
NULL)
pc2++,
pc3;
/*
如果找到了子串,進行以下處理工作*/
if(NULL==*pc3)
{
pc3
=
rep;
/*將替代串追加到結果串*/
while(*pc3
!=
NULL)
*pc1
=
*pc3;
pc2--;
source
=
pc2;
/*
檢查
source和sub相等循環結束後
*
pc2
對應位置是在
sub
中串結束符處該是源串中下個位置
*
將
source
指向其前面個
***************************************************/
}
/*如果沒找到子串,下面復制source所指位元組到結果串*/
*pc1
=
*source;
source;
/*
將source向後移個*/
}
*pc1
=
NULL;
result;
}
⑻ C語言字元串替換如何做
記得點贊:
#include<stdio.h>
#include<string.h>
#include<malloc.h>
void main()
{
char *p;
int i,j,k;
p=(char*)malloc(1001);
puts("輸入字元串:");
gets(p);
i=strlen(p)-3;
for(j=0;j<=i;j++)
{
if(*(p+j)=='y'&&*(p+j+1)=='o'&&*(p+j+2)=='u'){
*(p+j)='w';
*(p+j+1)='e';
for(k=j+2;k<=i+2;k++)
*(p+k)=*(p+k+1);
}
else if(*(p+j)=='w'&&*(p+j+1)=='e'){
*(p+j)='y';
*(p+j+1)='o';
for(k=i+3;k>=j+2;k--)
*(p+k+1)=*(p+k);
*(p+j+2)='u'; }
}
printf("%s\n",p);
free(p);
}
⑼ c語言如何替換這個字元串
不需要替換啊,直接去掉字元串中的多餘字元就行