AT_past202107_d题解
本题思路:
此题只需每次取三个字符,看是否满足条件,如果满足,直接替换,否则,继续查询。
这里可以用到 substr 取字符,同时也可以用一个 string 数组记符合条件的 5 种情况。
科普知识:string介绍
string s: 初始化: string s = ""; string s(n, ch); //初始化n个字符 读取: 流(cin、ssin) >> s; //以空格、换行结束读入,不读走空格或换行! getline(流, str); //从流中以换行符'\n'结束读入, 并读走'\n' getline(流, str, ch); //从流中以字符ch结束读入, 并读走ch 容量: s.size(); //O(1) s.empty(); //O(1) s.clear(); //O(n) s.resize(n); //修改s的大小为n 插入: s.insert(pos, n, ch); //在位置pos插入n个字符ch s.insert(pos, str); //在位置pos插入字符串str s.push_back(ch); //尾插 删除: s.erase(pos, n); //从pos开始删除n个字符(包括s[pos]) s.erase(pos); //从pos开始删除后续字符(包括s[pos]) s.pop_back(); //去尾 访问: s[] s.front(); //等同于s[0] s.back(); //等同于s[s.size() - 1] 迭代器: s.begin(); s.end(); //近似 &s[0] 与 &s[s.size()] s.rbegin(); s.rend(); //近似 &s[s.size() - 1] 与 &s[-1] 查找: s1.find(s2); //在s1中查找s2(字符串、字符)第一次出现的下标, 没有则返回string::npos s1.rfind(s2); //在s1中查找s2(字符串、字符)最后出现的下标, 没有则返回string::npos 类型转换: s.c_str(); //返回不可修改的 C 字符数组版本 stoi(s); stoll(s); //转换字符串为int、long long stod(s); //转换字符串为double to_string(x); //将整型或浮点型转为string 子串: s.substr(pos, n); //返回s中从pos开始的n个字符构成的子串 s.substr(pos); //返回s中从pos开始的子串
上代码!
1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 4 using namespace std; 5 int n; 6 string s; 7 string strs[5] = {"axa", "exe", "ixi", "oxo", "uxu"}; //特判技巧,将4种情况记录下来 8 int main() { 9 // freopen("xxxx.in", "r", stdin); 10 // freopen("xxxx.out", "w", stdout); 11 ios::sync_with_stdio(false); 12 cin.tie(0); 13 cin >> n >> s; 14 for (int i = 0; i < n; i++) { 15 string str = s.substr(i, 3); //从i开始取3个字符 16 for (int j = 0; j < 5; j++) { 17 if (str == strs[j]) { 18 s[i] = '.', s[i + 1] = '.', s[i + 2] = '.'; 19 break; 20 } 21 } 22 } 23 cout << s << endl; 24 return 0; 25 }

浙公网安备 33010602011771号