字符串的替换
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;