uva 10115 Automatic Editing

来源:互联网 发布:c语言线程函数 编辑:程序博客网 时间:2024/06/07 00:20
字符串题目,代码里面用了一点vector的东西,主要使用string类,以前没怎么用过,总结一下用到的string类的几个成员函数:

string::find(string str, int start_pos)

在字符串里面找第一个出现子串str的位置,位置从0开始,如果找不到子串,返回string::npos

string::erase(int start_pos, int num)

擦除掉start_pos开始的num个字符

string::replace(int start_pos, int len, string str)

将字符串从start_pos开始的len个字符替换为字符串str

综合应用上面的三个函数,这道题就好解决了。

#include <stdio.h>#include <string>#include <string.h>#include <algorithm>#include <iostream>#include <vector>using namespace std;#defineTEXT_LEN300struct node{string str1;string str2;};vector<struct node> m;void change(string &s, string str1, string str2){//cout << "change \"" << str1 << "\"to \"" << str2 << "\"" << endl;int pos;pos = 0;while(1){pos = s.find(str1, pos);if(pos == string::npos)break;if(str2.length() > 0){s.replace(pos, str1.length(), str2);pos ++;}else{s.erase(pos, 1);}if(pos >= s.length())pos = 0;}}int main(void){string s1, s2, s;s.resize(TEXT_LEN);char buffer[TEXT_LEN];int n, i;vector<struct node>::iterator it;struct node word_pair;while(1){gets(buffer);sscanf(buffer, "%d", &n);if(!n)break;m.clear();for(i=1; i<=n; i++){gets(buffer);word_pair.str1.assign(buffer);gets(buffer);word_pair.str2.assign(buffer);m.push_back(word_pair);}gets(buffer);s.assign(buffer);for(it=m.begin(); it!=m.end(); it++){change(s, it->str1, it->str2);}cout << s << endl;}return 0;}