top1编程
← 返回题目
题解

规定范围的字符串

1 条题解

  • 0
    @ 2026-8-5 15:42:10

    解题思路

    题目要求从字符串里取出第 n 个字符到第 m 个字符(第 n 个和第 m 个都算在内),组成新字符串输出。

    有一个重要的知识点:C++ 里字符串的下标是从 0 开始的。所以:

    • 字符串里的第 1 个字符,下标是 0;
    • 第 n 个字符,下标是 n - 1;
    • 从第 n 个到第 m 个,一共要取 m - n + 1 个字符。

    C++ 的 string 类型提供了一个好用的函数 substr:

    • s.substr(a, b) 表示从下标 a 开始,连续取 b 个字符。

    所以答案就是 s.substr(n - 1, m - n + 1)。

    注意:字符串这一行可能含空格,要用 getline 读整行;而整数 n、m 在下一行,直接用 cin 读就行。

    拿样例来说:字符串 I like program.,n = 3,m = 6。第 3 个字符是 l,第 6 个字符是 e,取出 like 输出。

    参考代码

    // 用途:从第n个字符截取到第m个字符并输出
    #include <iostream>
    #include <string>
    using namespace std;
    int main(){
        string s; int n,m;
        getline(cin,s); // 字符串可能含空格
        cin>>n>>m;
        // 第n个字符下标是n-1,共取m-n+1个字符
        cout<<s.substr(n-1, m-n+1)<<endl;
        return 0;
    }
    

    复杂度分析

    • 时间:substr 需要复制出长度为 m-n+1 的子串,时间复杂度是 O(m-n),不会超过字符串长度(不超过 100)。
    • 空间:除了存字符串外,只多出子串的空间,空间复杂度是 O(m-n)。
    • 1