top1编程
← 返回题目
题解

根据空格分割字符串

1 条题解

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

    解题思路

    题目说:输入的一个字符串里恰好有一个空格,我们要把这个空格当成“分界线”,把字符串分成前后两部分,分别输出。

    怎么做呢?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