c語言修改字元串
⑴ 在c語言里在一個文件里搜索一個字元串並進行修改
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>
void Substitute(char *pInput, char *pOutput, char *pSrc, char *pDst)
{
char *pi, *po, *p;
int nSrcLen, 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);
}
}
int main(int ac, char *av[])
{
if (ac!=5) {
printf("程序名 要操作的文件 新文件 查找的字元串 替換的字元串\n");
printf("示例:test.exe 1.txt 2.txt hello love\n");
return 0;
}
const int MAXSIZES = 100;
FILE *fpSrc,*fpDes;
char filename1[20]="1.txt";
char filename2[20]="2.txt";
//要求查找的字元串,替換的字元串;
char ps[]="hello";
char pd[]="love";
//求取所查找和替換的字元串的長度;
int len_src=strlen(av[3]);
int len_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);*/
char Src_buf[MAXSIZES] = {0};
char Cpy_buf[MAXSIZES] = {0};
char Des_buf[MAXSIZES] = {0};
//打開文件
if((fpSrc=fopen(av[1],"r+"))==NULL)
{
printf("fail to open the file1 !\n");
exit(1);
}
if((fpDes=fopen(av[2],"a+"))==NULL)
{
printf("fail to open the file2 !\n");
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");
return 0;
}
⑵ C語言如何更改字元串的內容
是的。如果是修改字元串中全部內容,可以使用strcpy
但是,如果是局部修改,部分修改的話,或者是修改字元串中某個指定的字元等等,得自己定義一個函數實現。
⑶ C語言如何更改字元串的內容
是的。如果是修改字元串中全部內容,可以使用strcpy
但是,如果是局部修改,部分修改的話,或者是修改字元串中某個指定的字元等等,得自己定義一個函數實現。
⑷ C語言中結構體的中的字元串的內容如何修改
兩步。
1、#include<string.h>
2、strcpy(p->name,(p+1)->name);
也可整體賦值:
*p=*(p+1);
⑸ C語言中,如何在文本文件中搜索指定字元串並修改
編譯環境vc2005/dev-c++
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 10000 /* 設定文件最大字元個數不超過10000,可更改 */
int main()
{
int i=0,j,k=0,m=0,pos=0,max,len1,len2;
char s[N],t[N],a[200],s1[200],s2[200];
FILE *fp;
printf("Please input file name:\n");/*輸入文件名*/
gets(a);
printf("Please input original string:\n");/*輸入要替換的字元串*/
gets(s1);
printf("Please input new string:\n");/*輸入被替換成的字元串*/
gets(s2);
len1=strlen(s1);
len2=strlen(s2);
if ((fp=fopen(a,"r"))==NULL)/*設定文件位於當前目錄下,可更改為絕對路徑*/
{ printf("Open file %s error! Strike any key to exit!",a);
system("pause");
exit(1);
}
s[i++]=fgetc(fp);
while(!feof(fp))
{s[i++]=fgetc(fp);<br/>}
fclose(fp);
max=i-1;/* 函滲氏喊數feof()最後會讀兩次,所以必須減1 */
for(i=0;i<max-len1;i++)
{for(j=0;j<len1&&(s[i+j]==s1[j]);j++);<br/> if(j!=len1)<br/> continue;/* 不相等則i加1進行下一次外循環 */<br/> else<br/> { for(k=0;k<i-pos;k++)/* pos記錄開始復制的位置 */<br/> t[m++]=s[pos+k];<br/> pos=i+len1;<br/> for(k=0;k<len2;k++)/* 字元串叢野替換 */<br/> t[m++]=s2[k];<br/> }
}
for(k=pos;k<max;k++)/* 復制剩餘字元 */
t[m++]=s[k];
max=m;/* max是替換後文件的字元總數 */
fp=fopen(a,"w");
printf("\n\nThe results are:\n\n");
for(j=0;j<max;j++)
{putchar(t[j]); /* 結果顯示到屏幕 */<br/>fputc(t[j],fp); /* 同時結果寫入到當核肆前目錄下的新文件001.txt中 */<br/>}
printf("\n\n");
fclose(fp);
system("pause");
return 0;
}
⑹ c語言如何把輸入的字元串進行轉換
1、第一新建一個project。
⑺ c語言編程替換文件中字元串
方法和詳細的操作步驟如下:
1、第一步,依次單擊visual C ++ 6.0的「文件」-->「新建」-->「文件」-->「C++ Source File」選項,見下圖,轉到下面的步驟。
⑻ 在c語言中,字元串作在全局區不可修改,那麼在堆區可以修改嗎
如題中代碼是不可以的,原因如下:
p.被定義為字元型指針,接下來給p賦值等於malloc返回的地址;
隨後又給p賦值為字元常量的地址,此時並不是把這個常量字元放到malloc返回的地址,而是編譯器給字元串常量分配的地址,同時把這個地址賦值給p。常量字元串不可修改。
如果需要讓你的想法實現得用字元串復制函數把,字元串復制到malloc返回的內存地址之中。
strcpy(p, "asjwoep;sd'asd");
需要包含頭文件string.h。
⑼ 怎樣在C語言中修改字元串的一個字元的值
根據字元串存儲的變數的不同,方法不同,參考代碼:
存儲在char數組中(支持C/C++)
char
str[]="hello"
;
int
i;
for(
i=0;str[i];i++
)
printf("%c\n",
str[i]
);
//以數組方式引用一個字元:str[i]
for(
i=0;*(str+i);i++
)
printf("%c\n",
*(str+i)
);
//以指針方式引用一個字元:*(str+i)
存儲在string中(僅支持C++)
string
str="abcde";
for(string::iterator
iter
=
s.begin();
iter!=s.end();
iter++)
//使用迭代器
{
cout<<*iter<<endl;
}
cout<<endl;
for(
int
i=0;i<s.length();i++
)
{
cout<<s[i]<<endl;
//使用數組方式調用,得到單個元素
}
⑽ c語言編程替換文件中字元串
方法和詳細的操作步驟如下:
1、第一步,依次單擊visual C ++ 6.0的「文件」-->「新建」-->「文件」-->「C++ Source File」選項,見下圖,轉到下面的步驟。