POJ 1572 字符串替换

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;
}



原文地址:https://www.cnblogs.com/mingrigongchang/p/6246264.html