洛谷:P5734:文字处理软件


洛谷:P5734:文字处理软件

Table of Contents

题目

P5734:文字处理软件

分析

本题旨在让用户熟悉字符串的一些基本操作。

  1. 两个字符串拼接。C++可以用最直观的+进行两个字符串的拼接。
string doc;
//... ...
string str;
cin >> str;
doc += str;
  1. 截取一部分,也就是获得子串。str.substr(a, b)可以完成这个工作。它从str的位置a开始(包括这个位置),截取长度为b的一个字符串。例如:假定str="abcdefghi",那么str.substr(1,2)会返回"bc"(从位置1开始截取长度2的一个字符串)。

  2. 在中间插入。str.insert(l, s)会在str的位置l之前插入字符串s

下面是一个插入操作的例子:

string doc = "hello";
doc.insert(2, "abc"); // 在位置2,也就是'l'前插入"abc"
cout << doc << endl;  // 输出: heabcllo
  1. 查找。一个最简单的应用是在str中,从头找一个子字符串sstr.find(s)。如果能找到,那么会返回第一次出现s的位置。如果找不到,按照C++的语法规定,是返回一个string::npos,但在类似竞赛题目中,可以将其转换为int而输出将是-1。

答案

Solution

思考

str.find()还有另外一个形式,可以指定查找的起始位置,例如:str.find(s, pos),这样会从pos位置开始查找子字符串s

string str = "abcabcabc";
size_t pos = str.find("abc", 3); // 从位置3开始查找"abc"
cout << pos << endl; // 输出3

pos = str.find("abc", 4); // 从位置4开始查找"abc"
cout << pos << endl; // 输出6

从这个思路出发,我们可以在一个字符串里找到所有"abc"的位置 。

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

int main() {
    string str = "abcabcabc";
    string pattern = "abc";
    size_t pos = str.find(pattern);
    while (pos != string::npos) {
        cout << "Found at position: " << pos << endl;
        pos = str.find(pattern, pos + 1);
    }
    return 0;
}

输出结果:

Found at position: 0
Found at position: 3
Found at position: 6

Previous Next