您的位置:首页 > 其它

POJ 1572 字符串替换

2016-07-30 17:16 169 查看
http://poj.org/problem?id=1572     

看了网上那么多行的C++代码的做法我也是被吓到了,其实用C++的string类函数很简单啊

关键是替换的字符串不能回头,不然有些测试数据,一个循环过后,你又回头重新再新串中去查,很可能就无限循环了。

1.假如定义一个string s[1],则定义了一个字符串数组:

string s[2];

s[1]="01234 5678";
cout<<s[1].length()<<" "<<s[0].length()<<endl;

输出0 10

如果用getline(cin,string*),则会读取整个一行作为一个字符串存储在string*中,包括空格。

2.             str3.erase(index,str1[i].length());//删除index的位置

                str3.insert(index,str2[i]);//插入到index位置

              比如str=abana str1=ban,str2=ny,则index返回1,从2开始删除,删除到str1的长度。

             之后str=ana,insert把str2插入下标1的位置,插入长度为str2的长度。

#include <iostream>
#include <cstdio>
#include <string>
using namespace std;

int main()
{
//freopen("in.txt","r",stdin);
while(1)
{
int n;
scanf("%d",&n);
if(n==0)
break;
string str1[12];
string str2[12];
getchar();
for(int i=0; i<n; i++)
{
getline(cin,str1[i]);
getline(cin,str2[i]);
}
string str3;
getline(cin,str3);
for(int i=0; i<n; i++)
while(1)
{
int index=str3.find(str1[i]); //查找要替换的字符串位置,没有返回string::npos,返回到查找到的串的第一个字符的下标
if(index==string::npos)
break;
str3=str3.replace(index,str1[i].length(),str2[i]); //replace函数直接替换,或者用erase和insert也行
//str3.erase(index,str1[i].length());//删除index的位置
//str3.insert(index,str2[i]);//插入到index位置
}
cout<<str3<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: