字符串的替换

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/*

字符串的替换. 将原字符串a中的b子串替换成c字符串,并存储到文件内

2013/6/24

*/

#include

#include

#include

#include

usingnamespace std;

// a 从文件中读入的原字符串

// b 要查找的字符串

// c 要替换b的字符串

void StrReplace(char a[], int fir, int last, int alen, char c[], int clen); int ReplaceStr(char a[], int alen, char b[], int blen, char c[], int clen);

int main()

{

char a[250] = "000000";

char b[20] = "00";

char c[20] = "-";

cout <<"输入原字符串"<< endl;

cin >> a;fflush(stdin);

cout <<"输入要查找的字符串"<< endl;

cin >> b;fflush(stdin);

cout <<"输入替换用的字符串"<< endl;

cin >> c;fflush(stdin);

//求出三个字符串的长度

int alen, blen, clen;

for (alen = 0; a[alen] != '\0'; alen++) { }

for (blen = 0; b[blen] != '\0'; blen++) { }

for (clen = 0; c[clen] != '\0'; clen++) { }

//替换字符串

ReplaceStr(a, alen, b, blen, c, clen);

cout<<"输出的字符串"<< endl << a << endl;

//从文件中读入

char * addr = "E:\\SkyDrive\\Desktop\\source.txt";

fstream myfile(addr);

if (myfile.bad())

{

cout <<"没有该文件"<< endl;

return 0;

}

int i = 0;

while(!myfile.eof())

{

myfile.getline(a, 250);

}

myfile.close();

cout <<"已从文件 "<< addr <<" 读入"<< endl;

cout <<"字符串"<< a << endl;

cout <<"输入要查找的字符串"<< endl;

cin.getline(b, 20);fflush(stdin);

//cout << b << endl;

cout <<"输入替换用的字符串"<< endl;

cin.getline(c, 20);fflush(stdin);

//求出三个字符串的长度

for (alen = 0; a[alen] != '\0'; alen++) { }

for (blen = 0; b[blen] != '\0'; blen++) { }

for (clen = 0; c[clen] != '\0'; clen++) { }

//替换字符串

ReplaceStr(a, alen, b, blen, c, clen);

cout<<"输出的字符串"<< endl << a << endl;

//存入文件

myfile.open(addr, ios::out);

myfile << a;

system("pause");

return 0;

}

//alen a的长度 blen b字符串的长度

int ReplaceStr(char a[], int alen, char b[], int blen, char c[], int clen) {

int i = 0;

bool found = FALSE;

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

{

if (a[i] == b[0])//如果匹配上第一个字母

{

int j = 0;

//逐个判断字符是否匹配

for (j = 0; j < blen; j++)

{

if (a[i+j] != b[j])

{

break;

}

}

if (j >= blen)//从for循环正常跳出, 字符串匹配

{

found = TRUE;

//进行替换

StrReplace(a, i, i+j-1, alen, c, clen);

//i指向替换后a中c字符串部分的最后一个字母

i += (clen-1);

//重新计算a的长度

alen += clen-blen;

}

}

}

if (!found)

{

cout <<"没有查找到该字符串"<< b << endl;

}

return -1;

}

/*进行字符串替换

fir = a字符串中b字符串的第一个字符的位置

last= a字符串中b字符串的最后一个字符的位置

例如: 01234...

a = "ABCDEFGHIJK"

b = "BCD"

c = "bcd"

则: fir = 1;

last = 3;

*/

void StrReplace(char a[], int fir, int last, int alen, char c[], int clen) {

int i, j;

相关文档
最新文档