题解
规定范围的字符串
1 条题解
-
0
解题思路
题目要求从字符串里取出第 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