题解
根据空格分割字符串
1 条题解
-
0
解题思路
题目说:输入的一个字符串里恰好有一个空格,我们要把这个空格当成“分界线”,把字符串分成前后两部分,分别输出。
怎么做呢?
string类型里有一个好用的函数find:s.find(' ')会返回字符串中第一个空格的位置(下标)。因为只有一个空格,它就是这个空格的位置。
假设空格的位置是 p,那么:
- 空格前面的部分是下标 0 到 p-1,用
s.substr(0, p)取出; - 空格后面的部分是下标 p+1 到结尾,用
s.substr(p + 1)取出(只给一个参数时,表示从该下标一直取到字符串结尾)。
把两部分分别输出一行就可以了。
注意:字符串里可能含有空格(就是那个用来分割的空格),所以要用
getline读整行。拿样例
abc 123来说,空格在第 3 个位置,前面是abc,后面是123。参考代码
// 用途:按空格把字符串分割成两部分输出 #include <iostream> #include <string> using namespace std; int main(){ string s; getline(cin,s); // 字符串里含一个空格,用getline读整行 int p = s.find(' '); // 找到空格的位置 cout<<s.substr(0,p)<<endl; // 输出空格前的部分 cout<<s.substr(p+1)<<endl; // 输出空格后的部分 return 0; }复杂度分析
- 时间:
find和substr都只与字符串长度有关,时间复杂度是 O(n),n 是字符串长度(不超过 1000)。 - 空间:除了存字符串,
substr会复制出两个子串,总空间是 O(n)。
- 1